ChinaUnix.net
相关文章推荐:

linux IO 阻塞 线程运行

服务器模型的选择一般来说只是一个个人喜好问题,不过在有些情况下还是有一个最优方案。在同时有大量连接(几千个左右)、每次通讯传输的内容较小(几十K左右)的情况下,比如一个短信SP服务器,或者一个分布式spider服务器向大量爬虫分发url等,多进程/多线程模型就会显得笨重而低效,这就是非阻塞io模型出场的时候了。我最近就写了这样一个服务器,在同时上千连接的情况下还可以保持极快的速度(在传输量较小的情况下甚至可以达到...

by 福瑞哈哥 - C/C++ - 2010-09-17 10:19:55 阅读(4258) 回复(10)

相关讨论

如有一个线程:当一个条件变量满足时,它开始运行,在运行中,如果另一个条件变量满足时,它又必须阻塞, 要一个条件变量还是两个,有其它的方法也可以! 其实我最主要是目的就是实现类似守护进程的功能,当没有别的线程运行时,它就运行,一旦别的线程条件满足可以运行时,它必须变为阻塞

by xin8525 - C/C++ - 2011-09-26 15:30:04 阅读(2951) 回复(5)

就拿网络通信中的send和recv来说吧,比如我需要处理接收到的数据,对一个套接字调用一个recv,如果套接字是非阻塞的,recv会立即返回,等数据到来时候是如何得到数据的那?也是放在传给recv的缓冲区里面放着的吗?如果我在recv下面又用到了这个缓冲区该怎么办? 在windows下的完成端口是通过GetQueuedCompletionStatus获得接收到的数据的,epoll和iocp应该差不多吧,不知道如果吧epoll中的套接字也设置成非阻塞的怎么得到接收到的数...

by yang_crystal - C/C++ - 2008-07-29 17:54:04 阅读(1424) 回复(4)

读取文件的io默认操作是阻塞的,有没有非阻塞io

by amoyppa - Java - 2006-03-24 09:47:23 阅读(1320) 回复(5)

请教: 我要在unix服务器上执行命令收集性能数据,需要长时间运行命令,例如 vmstat 1,如: proc = Runtime.getRuntime().exec("vmstat 1"); InputStream istr = proc.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(istr)); 问题是:proc不会读到数据,就返回,类似TCPIP 阻塞式socket一样,读到数据就开始下面的语句 请教:如何实现,最好给段程序看看

by stzhjx - Java - 2003-11-18 09:18:57 阅读(794) 回复(1)

有个异步的网络连接,想在发送数据之前知道现时缓冲区所剩下的大小,怎么能做到呀?想用ioctl的,不过man一下提示 NOTE In order to use this call, one needs an open file descriptor. Often the open(2) call has unwanted side effects, that can be avoided under linux by giving it the O_NONBLOCK flag. 应该怎样才能做到呀?

by yuhang001 - C/C++ - 2009-08-28 14:01:08 阅读(2070) 回复(13)

我在freebsd7上 $mkfifo f1 $echo "KK">f1 然后shell阻塞到了这里,开另一个console,输入 $read t>f1效果是一样的。在阻塞的过程中,按下^C就会显示Interrupted system call 问题: fifo的操作总是阻塞和同步的吗,我是否可以向fifo里面写入一点东西,过一段时间再从这个fifo里面读出呢? 或者说echo "KK">f1这个操作是否可以不被阻塞而是立刻结束? 谢谢!

by jeanlove - Shell - 2009-04-30 23:02:43 阅读(1521) 回复(8)

以下是我的代码: use IPC::Open2; use Data::Dumper; use io::Select; use POSIX ":sys_wait_h"; pipe(FROM_PARENT, TO_CHILD) or die "pipe: $!"; pipe(FROM_CHILD, TO_PARENT) or die "pipe:$!"; select((select(TO_CHILD), $| = 1)[0]); select((select(TO_PARENT), $| = 1)[0]); $s = io::Select->new(); $fnum=$wnum=1; our $zombies = 0; $SIG{CHLD} = sub { $zombies++ }; sub REAPER { my $pid; w...

by miaho - Perl - 2009-01-15 11:43:45 阅读(1392) 回复(1)

以前从来没在客户端使用过io::Select,今天刚好没事做个测试,结果很迷茫,需要人帮忙解答。判断是否连接成功,是判断can_write,对吧?这个大前提应该没错。我用的perl 5.8.8。首先io::Socket::INET建立socket,设置为不阻塞,然后下面用select来判断can_write,结果不管什么端口都立即返回为连接成功。只有当socket设置为阻塞的时候,下面用select判断出来的才准确。 这里,刚好和我认为的相反。如果上面socket要阻塞了,下面才...

by 撒哈拉里的鱼 - Perl - 2008-06-30 17:08:16 阅读(1995) 回复(7)

use io::Socket ; my $server = shift ; my $fh = io::Socket::INET->new ($server) ; my $line = <$fh> ; print $line ; ======================= 上面的代码运行没有结果: 按照教程,应该有返回: % lgetr.pl mail.hotmail.com:smtp 2:220-HotMail (NO UCE) ESMTP server ready at Tue Aug 08 05:24:40 2000

by hoohoobjj - Perl - 2007-11-27 16:19:45 阅读(1453) 回复(2)

原作者姓名 Fang(fangguicheng@21cn.com) 异步io、APC、io完成端口、线程池与高性能服务器之一 异步io 背景:轮询 Pio DMA 中断 早期io设备的速度与CPU相比,还不是太悬殊。CPU定时轮询一遍io设备,看看有无处理要求,有则加以处理,完成后返回继续工作。至今,软盘驱动器还保留着这种轮询工作方式。 随着CPU性能的迅速提高,这种效率低下的工作方式浪费了大量的CPU时间。因此,中断工作方式开始成为普遍采用的技术。这种技...

by milanism - 网络技术文档中心 - 2006-03-20 14:54:05 阅读(621) 回复(0)