我正在尝试使用C#中的非阻塞套接字进行套接字编程。 我找到了一些示例,比如这个,它似乎使用while(true)循环,但是这种方法会导致CPU占用率达到100%。 有没有一种使用事件编程风格的方式来使用非阻塞套接字? 谢谢
我正在尝试使用C#中的非阻塞套接字进行套接字编程。 我找到了一些示例,比如这个,它似乎使用while(true)循环,但是这种方法会导致CPU占用率达到100%。 有没有一种使用事件编程风格的方式来使用非阻塞套接字? 谢谢
总的来说,关于阻塞/非阻塞IO,一般适用:
关键在于在现实生活中,当您的程序不进行IO操作时,它会做其他事情。这些示例都是这样人为制造出来的。
在阻塞IO中,当等待IO时,您的线程会被“阻塞”。操作系统会去做其他事情,例如允许其他线程运行。因此,通过使用多个线程,您的应用程序可以在概念上同时执行许多任务。
在非阻塞IO中,您的线程查询以查看是否可能进行IO,否则会去做其他事情。因此,您可以通过在应用程序级别显式地在它们之间切换来并行执行许多任务。
thread.sleep(100)
或更少的时间。这将让其他进程有机会执行它们的任务。Socket.BeginReceive和AsyncCallback