c# - 如何使用单线程完成多线程?

标签 c# .net multithreading delegates

在最近的一次“技术讨论”中,有人问我“如何使用单线程实现多线程?”在确认面试官不认为这是一个 trick 问题后,我不得不承认我对如何在单线程上实现多线程没有很好的想法,而且我认为这个问题有点自相矛盾。面试官提供的答案“通过使用多播委托(delegate)”让我想知道他是否真的不了解委托(delegate)和底层线程。我很想知道这个问题是否有任何值(value),更重要的是,相关的答案是否有意义。谢谢。

最佳答案

协程是用来模拟协作多线程(.NET 不支持,除非我们将 async/await 模式视为协程模式)。

异步编程模拟多线程(至少部分...例如同时执行多个读/写)...两者都是隐藏“线程”部分的可能解决方案。

详细说明异步编程... 可以构建一个完整的 Web 服务器,能够基于单线程 + 异步详细说明同时响应数百个请求。每次从磁盘读取都将异步完成。对连接客户端的每个响应都将异步完成,依此类推。

根据我的理解,给出一个名称,node.js 是一个完全基于异步编程(技术上称为非阻塞 I/O)的单线程 Web 服务器...参见示例 https://stackoverflow.com/a/14797359/613130

对于我所写的内容,我要补充一点,有一些语言可以实现所谓的 Green threads。 .绿色线程是不使用操作系统调度程序的协作线程。他们的代码因此在单个线程中执行(至少从他们的角度来看)。好像Go、haskell、old Ruby、各种版本的Smalltalk都用/用过绿色线程)。

关于c# - 如何使用单线程完成多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18276288/

相关文章:

c# - 以编程方式使用免费代理服务器连接到网站

c++ - 我如何衡量我的多线程代码扩展(加速)的方式?

c# - 如何在 DateTimePicker 中设置字体大小

c# - 如何从 UWP TimePicker 中删除按钮

c# - 泛型:其中 T 是 TypeA 或 TypeB

c# - 为什么 EntityState 枚举是用 FlagsAttribute 定义的

.net - .NET 中的本地可继承线程

multithreading - 多线程模型之间的差异

java - wait()和notify()方法,总是发生IllegalMonitorStateException并告诉我当前线程不是Owner,为什么?

c# - 如何根据Incident Guid获取注解