基于事件编程的难题
虽然有异步IO来解决event loop可能被阻塞的问题,但是基于事件编程依然是困难的。 首先,我们提到,event loop是运行在一个线程中的,显然一个线程是没有办法充分利用多核资源的,有的同学可能会说那就创建多个event loop实例不就可以了,这样就有多个event loop线程了,但是这样一来多线程问题又会出现。 另一点在于编程方面,在《从小白到高手,你需要理解同步与异步》这篇文章中我们讲到过,异步编程需要结合回调函数(关于回调函数请才参考《程序员应如何彻底理解回调函数》),这种编程方式需要把处理逻辑分为两部分,一部分调用方自己处理,另一部分在回调函数中处理,这一编程方式的改变加重了程序员在理解上的负担,基于事件编程的项目后期会很难扩展以及维护。 那么有没有更好的方法呢? 要找到更好的方法,我们需要解决问题的本质,那么这个本质问题是什么呢? 更好的方法 为什么我们要使用异步这种难以理解的方式编程呢? 是因为阻塞式编程虽然容易理解但会导致线程被阻塞而暂停运行。 那么聪明的你一定会问了,有没有一种方法既能结合同步IO的简单理解又不会因同步调用导致线程被阻塞呢? 答案是肯定的,这就是用户态线程,user level thread,也就是大名鼎鼎的协程,关于协程值得单独拿出一篇文章来讲解,就在下一篇。 虽然基于事件编程有这样那样的缺点,但是在当今的高性能高并发服务器上基于事件编程方式依然非常流行,但已经不是纯粹的基于单一线程的事件驱动了,而是event loop + multi thread + user level thread。
关于这一组合,同样值得拿出一篇文章来讲解,我们将在后续文章中详细讨论。 (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |