Chinaunix

标题: 线程间用那一种文件描述符通讯效率最高? [打印本页]

作者: svenwang    时间: 2005-03-03 13:03
标题: 线程间用那一种文件描述符通讯效率最高?
基本设想是一个线程往一个文件描述符写入数据,另外一个线程使用select/poll在文件描述符上等待数据。
想了解一下效率最高的通讯方式,是unix域套接字,pipe,或者其他?这里的效率是指响应时间上的。
作者: sunlan    时间: 2005-03-03 17:14
标题: 线程间用那一种文件描述符通讯效率最高?
原帖由 "svenwang" 发表:
基本设想是一个线程往一个文件描述符写入数据,另外一个线程使用select/poll在文件描述符上等待数据。
想了解一下效率最高的通讯方式,是unix域套接字,pipe,或者其他?这里的效率是指响应时间上的。



用命名管道(也叫fifo)
作者: afeiraul    时间: 2005-03-03 18:16
标题: 线程间用那一种文件描述符通讯效率最高?
原帖由 "sunlan" 发表:



用命名管道(也叫fifo)

能讲讲原因吗?
谢谢了~~!!
作者: JohnBull    时间: 2005-03-03 22:45
标题: 线程间用那一种文件描述符通讯效率最高?
线程间最快的方法当然是公用内存!
比如用堆。
作者: 柳五随风    时间: 2005-03-03 22:56
标题: 线程间用那一种文件描述符通讯效率最高?
不考虑MULTIPLEX的话,共享就行了.
考虑MULTIPLEX的话,PIPE最快,但PIPE一般在KERNEL里面只有4K的空间,我见过最大的也就几个PAGE,考虑到PIPE的操作是原子的,所以PIPE不适合大数据交换.NAME PIPE也好不到那里去.SOCKET的话,恩我没有见过这样的设计,用是肯定可以,不过,有那必要吗?
作者: JohnBull    时间: 2005-03-03 23:01
标题: 线程间用那一种文件描述符通讯效率最高?
原帖由 "柳五随风" 发表:
不考虑MULTIPLEX的话,共享就行了.
考虑MULTIPLEX的话,PIPE最快,但PIPE一般在KERNEL里面只有4K的空间,我见过最大的也就几个PAGE,考虑到PIPE的操作是原子的,所以PIPE不适合大数据交换.NAME PIPE也好不到那里去.SOCKET..........


就算用上sem也是内存共享快。而且通讯量越大越显得快。
作者: 柳五随风    时间: 2005-03-03 23:45
标题: 线程间用那一种文件描述符通讯效率最高?
JohnBull你看懂我说的是什么了吗?
作者: svenwang    时间: 2005-03-04 00:12
标题: 线程间用那一种文件描述符通讯效率最高?
原帖由 "JohnBull" 发表:
线程间最快的方法当然是公用内存!
比如用堆。

我是想用select/poll来等待数据,所以相同的地址空间/共享内存不能解决这个问题。
作者: JohnBull    时间: 2005-03-04 00:44
标题: 线程间用那一种文件描述符通讯效率最高?
原帖由 "svenwang" 发表:

我是想用select/poll来等待数据,所以相同的地址空间/共享内存不能解决这个问题。


我不信,用sem肯定可以。
作者: 思一克    时间: 2005-03-04 09:46
标题: 线程间用那一种文件描述符通讯效率最高?
根据你的要求,就用pipe就可以了。
作者: lisp    时间: 2005-03-04 10:09
标题: 线程间用那一种文件描述符通讯效率最高?
不晓得那个更快,我的话就用最简单的pipe就ok了
作者: JohnBull    时间: 2005-03-04 19:47
标题: 线程间用那一种文件描述符通讯效率最高?
不论是pipe还是socket,都要对数据进行至少2次复制。
而共用内存不用复制。

所以pipe或socket不可能比共用内存更快,就算用上信号量也一样。
作者: liaojs    时间: 2005-03-04 20:00
标题: 线程间用那一种文件描述符通讯效率最高?
在IPC方式中sem是最快的吧。
作者: sunlan    时间: 2005-03-04 20:58
标题: 线程间用那一种文件描述符通讯效率最高?
[quote]原帖由 "liaojs"]在IPC方式中sem是最快的吧。[/quote 发表:


问题是sem本身是不带数据的。不过可以通过sem+shm来解决。
作者: svenwang    时间: 2005-03-04 23:03
标题: 线程间用那一种文件描述符通讯效率最高?
原帖由 "JohnBull" 发表:
不论是pipe还是socket,都要对数据进行至少2次复制。
而共用内存不用复制。

所以pipe或socket不可能比共用内存更快,就算用上信号量也一样。

pipe的性能确实比较差。但是共用内存有文件描述符吗?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2