进程通信和线程通信的区别
请问大家,事件是不是不能用做进程间通信. 一般书上的说明都是进程间通信有消息队列,管道,信号量.可就是没有事件.而线程通信一般都说有事件.难道事件就无法用做进程间通信吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
请问大家,事件是不是不能用做进程间通信. 一般书上的说明都是进程间通信有消息队列,管道,信号量.可就是没有事件.而线程通信一般都说有事件.难道事件就无法用做进程间通信吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(9)
Event么?这个概念很宽泛,没有统一的定义。不知道楼主说的是哪种事件?
我想这里事件应该是指的操作系统的一种响应对象。比如用户敲了一下键盘。我的意思是操作系统会提供一些api给程序开发使用。专门用来定义一些自定义的事件对象。软件的运行过程中,进程或者线程可以使用这些api去触发或者接收这些事件.
现在基本上所有的介绍线程同步的资料上都提到应该是这种机制是线程通信的一种方式,我觉得进程应该也可以使用这种机制来通信.不知道为什么进程通信的书上都不提这种方式,而且我以前应该看到过有发送进程通信是靠事件来同步通知进程有消息放入消息队列,然后接收进程去从消息队列中取数据的.
这需要系统的提供,或者有相应的库。
候捷翻译的那本win32多线程程序设计中第四章明确说明线程同步机制包括:临界区,互斥器,信号量,事件.
最近这两天仔细研究了一下code,发现我现在做的这个应用中的两个线程间的所谓event其实还是用的message.只不过是线程自己做了个映射,做了个自环,将消息以事件的方式分了个类.
不过我记得很久以前我做的一个东西里面,的确是用事件通知,然后从消息队列中取消息的.就是记不得那是线程还是进程了.
我不知道线程和进程的明确区别,除了地址空间这一点我觉得可能影响比较大。我觉得如果操作系统能提供事件机制让线程同步,那就应该也能应用于进程之间。
如果说的是 Win32 GUI 编程中的 Event Loop,可以去看看 SysV IPC 的 Message Queue,乍看是很类似的东西(两个都没细看过),而且适用于进程之间的通信。
当然,通过使用共享内存区域,利用 pthreads 的 mutex 也可以方便实现一个自己的 message queue。不通过共享内存,则可以利用 socket 进行模拟。
对这个问题作一个总结吧,手头资料不够,写的如果有问题,请大家批评。几个系统中近程通信的方法:
unix:管道,消息队列,信号量(灯),共享存储,信号(signal),socket
linux:同上(不知道*nix系列是否都是如此)
vxworks:管道,消息队列,信号量(灯),信号,socket?
windows:不是很清楚。我分析了一下,就如tb01412(tb)所言,侯捷在win32多线程中的提到的那个事件,应该可以理解为一个sigal.
我曾经看到有人把sigal翻译为信号量的,我想这种翻译很误导人,应该是sephamore,或者干脆叫信号灯,这样比较清楚。
vxworks中应该没有一个明确的进程通信的概念。vxworks中应该是用的通用的一个task概念,好象是spawn函数.我不知道这task具体的实现细节.不过我想应该是到process.还有一点,在潜入式系统中,很多时候利用事件来分类消息,实际上这里应该还是消息.应该没有一个专门的创建事件的机制.
关于线程通信在这几个系统中的所用到的方法,我暂时没有列出来,希望大家能够指出来。不过我想很多东西应该是差不多的.比如linux中用进程模拟线程,我想通信的机制应该更加差不多.
这个问题我也放到csdn乐,连接如下:
http://community.csdn.net/Expert ... 6.xml?temp=.9421656
进程间是通信,线程间是同步.
因为每个线程可以访问整个进程空间,大家共享所有的数据,所以不存在通信,只是需要同步,以防止Race Condition.