首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带while(true)循环的C#非阻塞套接字

不带while(true)循环的C#非阻塞套接字
EN

Stack Overflow用户
提问于 2009-11-03 15:42:21
回答 4查看 20.1K关注 0票数 8

我只是在尝试使用c#中的非阻塞套接字进行一些套接字编程。我发现的各种示例,比如this,似乎都使用了while(真)循环,但这种方法会导致cpu在100%时崩溃。有没有办法通过事件编程风格来使用非阻塞套接字?谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-11-03 23:06:47

请参阅MSDN示例here。该示例展示了如何异步接收数据。您还可以使用套接字BeginSend/EndSend方法异步发送数据。

您应该注意到,回调委托在ThreadPool线程的上下文中执行。如果需要与另一个线程共享在回调中接收的数据,这一点很重要。如果是这样,您将需要使用lock关键字同步对数据的访问。

正如您已经注意到的,使用非阻塞套接字和while循环,处理器是100%挂起的。只有当有数据要发送或接收时,异步模型才会调用回调委托。

票数 8
EN

Stack Overflow用户

发布于 2012-10-15 01:37:19

为了避免在繁重的while循环中出现CPU问题,当没有数据接收时,放置thread.sleep(100)或更少。这将允许其他进程更改以完成其任务

票数 4
EN

Stack Overflow用户

发布于 2009-11-03 15:52:00

泛指阻塞/非阻塞IO,一般适用:

关键是在现实生活中,你的程序在不做IO的情况下做其他事情。所有的例子都是以这种方式设计的。

在阻塞IO时,你的线程在等待IO时“阻塞”。操作系统运行并做其他事情,例如允许其他线程运行。因此,您的应用程序可以通过使用多个线程(在概念上)并行地做许多事情。

在非阻塞IO中,您的线程查询IO是否可能,否则将执行其他操作。因此,您可以通过显式地-在应用程序级别-在它们之间交换来并行地做许多事情。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1665809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档