我只是在尝试使用c#中的非阻塞套接字进行一些套接字编程。我发现的各种示例,比如this,似乎都使用了while(真)循环,但这种方法会导致cpu在100%时崩溃。有没有办法通过事件编程风格来使用非阻塞套接字?谢谢
发布于 2009-11-03 23:06:47
请参阅MSDN示例here。该示例展示了如何异步接收数据。您还可以使用套接字BeginSend/EndSend方法异步发送数据。
您应该注意到,回调委托在ThreadPool线程的上下文中执行。如果需要与另一个线程共享在回调中接收的数据,这一点很重要。如果是这样,您将需要使用lock关键字同步对数据的访问。
正如您已经注意到的,使用非阻塞套接字和while循环,处理器是100%挂起的。只有当有数据要发送或接收时,异步模型才会调用回调委托。
发布于 2012-10-15 01:37:19
为了避免在繁重的while循环中出现CPU问题,当没有数据接收时,放置thread.sleep(100)或更少。这将允许其他进程更改以完成其任务
发布于 2009-11-03 15:52:00
泛指阻塞/非阻塞IO,一般适用:
关键是在现实生活中,你的程序在不做IO的情况下做其他事情。所有的例子都是以这种方式设计的。
在阻塞IO时,你的线程在等待IO时“阻塞”。操作系统运行并做其他事情,例如允许其他线程运行。因此,您的应用程序可以通过使用多个线程(在概念上)并行地做许多事情。
在非阻塞IO中,您的线程查询IO是否可能,否则将执行其他操作。因此,您可以通过显式地-在应用程序级别-在它们之间交换来并行地做许多事情。
https://stackoverflow.com/questions/1665809
复制相似问题