进程线程区别以及通信方式浅易分析

进程:
创建进程相当于自我拷贝一块虚拟内存区域,如果有进程A、B、C、D四个3G大小虚拟内存空间,而实际上运行内存只有2G,看起来几个进程同时处理事件运行,这点内存不够用,但实际上内存开辟成几个区域,让各个进程一部分虚拟内存运行在内存中,然后轮询。
linux系统的CPU相当于一个很大的链表,处理各种各进程,给它发送指令,处理指令,这个CPU在不断地遍历链表,然后给与要执行的进程一个时间片让它运行。

多线程实际上还是在一个进程中,所以线程之间相互通信可以直接访问该进程的资源,最简单地如全局变量。

而进程相互通信,因为运行不同的内存上,所以不可以直接通信,才有了后面的通信方式。
1.有名管道
通过管道文件进行对通信,此时只能有亲缘关系的进程才能相互通信。
2.无名管道
顾名思义,没有名字,那么所有进程都可以访问。
3.信号
信号相当于给CPU发送请求,信号的种类是有限的,可以通过kill -l查看,给CPU发送请求对其他进程进行处理。实际上不是相互通信,而可以看作向操作系统告状,或者通知什么事情。

system V 新加的功能
4.消息队列
这个可以看作是管道的升级版本,管道类似与在食堂排队的学生,不可以因为谁的成绩好坏而优先打饭。消息队列就如同去银行办理业务的客户,当你存款够多,能够让银行知道你对他们很重要就会优先让你办理业务。消息队列就是这样,它加入了一个对应的ID,其他进程可以根据ID来选择性通信。
5.信号量
有了量这个字在里面以后,读取消息都要看看量,其实就是数量,你要有量才能操作,否则休眠。
6.共享内存
这个是进程间通信效率最高的方式,怎么说呢,就相当把实际运行的内存映射到同一个内存中,既然都在同一内存,那么相互通信就简简单单了
7.套接字

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章