linux进程和线程的区别

2022-11-23 投稿:李士杰 分享

PIPE和FIFO用来实现进程间相互发送非常短小的、频率很高的消息;这两种方式通常适用于两个进程间的通信。

共享内存用来实现进程间共享的、非常庞大的、读写操作频率很高的数据(配合信号量使用);这种方式通常适用于多进程间通信。

其他考虑用socket。这里的“其他情况”,其实是今天主要会碰到的情况:分布式开发。

在多进程、多线程、多模块所构成的今天最常见的分布式系统开发中,socket是第一选择

。消息队列,现在建议不要使用了 ---- 因为找不到使用它们的理由。在实际中,我个人感觉,PIPE和FIFO可以偶尔使用下,共享内存都用的不多了。在效率上说,socket有包装数据和解包数据的过程,所以理论上来说socket是没有PIPE/FIFO快,不过现在计算机上真心不计较这么一点点速度损失的。你费劲纠结半天,不如我把socket设计好了,多插一块CPU来得更划算。另外,进程间通信的数据一般来说我们都会存入数据库的,这样万一某个进程突然死掉或者整个服务器死了,也不至于丢失重要数据、便于回滚到之前的状态。从这个角度考虑,适用共享内存的情况也更少了,所以socket使用得更多。再多说一点关于共享内存的:共享内存的效率确实高,但它的重点在“共享”二字上。如果的确有好些进程共享一大块数据(如果把每个进程都看做是类的对象的话,那么共享数据就是这个类的static数据成员),那么共享内存就是一个不二的选择了。但是在面向对象的今天,我们更多的时候是多线程 锁 线程间共享数据。因此共享进程在今天使用的也越来越少了。不过,在面对一些极度追求效率的需求时,共享内存就会成为唯一的选择,比如高频交易系统。除此以外,一般是不需要特意使用共享内存的。另外,PIPE和共享内存是不能跨LAN的

(FIFO可以但FIFO只能用于两个进程通信)。

如果你的分布式系统随着需求的增加而越来越大所以你想把不同的模块放在不同机器上而你之前开发的时候用了PIPE或者共享内存,那么你将不得不对代码进行大幅修改......同时,即使FIFO可以跨越LAN,其代码的可读性、易操作性和可移植性、适应性也远没有socket大。这也就是为什么一开始说socket是第一选择的原因。最后还有个信号简单说一下。请注意,是信号,不是信号量。

信号量是用于同步线程间的对象的使用的(建议题主看我的答案,自认为比较通俗易懂:semaphore和mutex的区别? - Linux - 知乎

)。信号也是进程间通信的一种方式。比如在Linux系统下,一个进程正在执行时,你用键盘按Ctrl c,就是给这个进程发送了一个信号。进程在捕捉到这个信号后会做相应的动作。虽然信号是可以自定义的,但这并不能改变信号的局限性:不能跨LAN、信息量极其有限

。在现代的分布式系统中,通常都是消息驱动:

即进程受到某个消息后,通过对消息的内容的分析然后做相应的动作。如果你把你的分布式系统设置成信号驱动的,这就表示你收到一个信号就要做一个动作而一个信号的本质其实就是一个数字而已。这样系统稍微大一点的话,系统将变得异常难以维护;甚至在很多时候,信号驱动是无法满足我们的需求的。因此现在我们一般也不用信号了。因此,请记住:除非你有非常有说服力的理由,否则请用socket。

顺便给你推荐个基于socket的轻量级的消息库:ZeroMQ。

#linux进程和线程的区别#相关文章

linux常用命令实验报告心得

Linux ftp 命令行中下载文件get与上传文件put的命令应用详解介绍:从本地以用户anok登录的机器上通过ftp远程登录到的ftp服务器上,登录用户名是peo。以下为使用该连接做的实验。查看远

0.2万人浏览 linuxLinuxlinux命令

linux系统怎么安装

1、将光盘启动,选择简体中文或者英文,如果选择简体中文,那么整个安装过程都将是中文界面;2、选择键盘的类型,我们国内使用的是美式的QWERTY键盘,所以保持默认的USEnglish。点击next,进入

0.2万人浏览 linuxlinux系统Linux

linux系统常用编程语言

谢谢邀请。零基础想要学编程的话,我认为可以尝试学习一下C语言。作为最古老的语言之一,C语言广泛适用于底层的开发,并且语法简单、容易上手,入门阶段只需要掌握一些简单的语法,像选择语句、函数、运算符号等就

0.2万人浏览 linux编程语言Linux

linux培训班费用

就目前市场上来说,linux运维培训班的收费标准都是差不多,大概在2w左右,没有什么太大差异,具体的话,就看选择哪家机构了,虽然收费一样,但是不同机构课程安排、教学质量还是有所差异的,需要根据自己的情

0.2万人浏览 linuxLinux

学了linux可以干什么

linux系统主要侧重学习服务的使用,不过也会有shell脚本知识,听说有个老男孩linux课程里面,也会有一些python语言的讲解主要学好系统,如果再学习些编程知识,可以对公司运营的网站架构能更清

0.2万人浏览 Linuxlinux可以干什么

linux适配最好的笔记本电脑

荣耀MagicBook 2019 第三方Linux版 14英寸轻薄窄边框笔记本电脑(AMD锐龙5 3500U 8G 512G FHD IPS )冰河银。机械革命(MECHREVO)S1 Pro 英特尔

0.2万人浏览 Linuxlinux笔记本电脑

linux系统怎么用

常用的IT服务器有Linux、Unix和Windows操作系统,其中Linux因其稳定、开源、免费、安全、高效的特点,发展迅猛,在服务器市场占有率超过80%,随着云计算的发展,Linux在未来服务器领

0.2万人浏览 LinuxlinuxLinux系统

美国能禁止中国使用linux吗

说句不好听的话,如果微软真全面停了中国的windows系统,我们真完了,我们引以为傲的高铁检票(其实绝大多数终端都用的windows)用的什么系统?最开始用的XP,前段时间看了下变成WIN7了,如果微

0.2万人浏览 linux禁止中国用禁止中国使用