在最近的一次“技术讨论”中,有人问我“如何使用单线程完成多线程?” 在确认面试官不认为这是一个棘手的问题后,我不得不承认我对如何在单线程上实现多线程并没有一个好主意,而且我认为这个问题有点矛盾。面试官提供的答案是“通过使用多播委托”,这让我想知道他是否真的不了解委托和底层线程。我很想知道这个问题是否有任何优点,更重要的是,相关的答案是否有意义。谢谢你。
问问题
376 次
1 回答
4
协程是为了模拟协作多线程(.NET 不支持,除非我们认为async
/await
模式是协程模式)。
异步编程模拟多线程(至少部分......例如同时执行多个读/写)......两者都是隐藏“线程”部分的可能解决方案。
详细说一下异步编程... 可以搭建一个完整的Web服务器,能够同时响应数百个请求,基于单线程+异步细化。每次从磁盘读取都将异步完成。对连接客户端的每个响应都将异步完成,依此类推。
起个名字,据我了解,node.js 是一个完全基于异步编程(技术上称为非阻塞 I/O)的单线程 Web 服务器...参见例如https://stackoverflow.com/a/14797359 /613130
在我所写的内容中,我将补充一点,有一些语言实现了所谓的绿色线程。绿色线程是不使用 OS 调度程序的协作线程。他们的代码因此在单个线程中执行(至少从他们的角度来看)。似乎 Go、haskell、旧 Ruby、各种版本的 Smalltalk 都使用/使用了绿色线程)。
于 2013-08-16T15:03:38.697 回答