作者回复: www是“主机名”,也就是表示这台主机用于提供万维网服务。
但现在大部分互联网上的主机都是http服务器,所以www现在只是一个“历史习惯”了,比如极客时间的网站“time.geekbang.org”,虽然不是www,但也是http服务。
不带www是域名的一种简化,通常会使用重定向跳转到其他的域名。
作者回复: 英文是I/O multiplexing,就是指多个I/O请求“复用”到一个进程或线程里处理,而不是开多个进程、线程处理。
可以看示意图再体会一下。
作者回复: 对。
作者回复:
1.基本正确,但同步阻塞的时候是这个线程被阻塞了,操作系统会把这个线程切换出去干别的,不会耗cpu,相当于这个线程没有充分利用cpu给它的资源。
2.同步非阻塞,是线程自己主动切换cpu给其他任务,但并没有让出cpu给其他线程或进程,因为在用户态,所以成本低,底层是epoll和Nginx的事件机制。
3.有超时机制,超时就会任务执行失败,不会死锁。
4.OpenResty的代码都是同步非阻塞的。
作者回复: good
作者回复: 可以看实体书《OpenResty完全开发指南》。
作者回复: 基本正确。不过Nginx里没有使用协程,它使用的是epoll的事件机制,向epoll注册socket的读写事件,当socket可读可写时调用响应的处理函数。
你说的协程是应用在OpenResty的Lua虚拟机里。
作者回复: OpenResty现在已经是一个成熟的Web开发生态体系了,已经有很多商业公司基于OpenResty开发各种业务应用,底层的LuaJIT性能很高,保证了它的运行效率。
njs现在还是处于起步阶段,功能比较弱,Nginx对它的定位是“可编程配置语言”,关注点还是在辅助Nginx,而不是用来开发复杂的业务逻辑。
还有很重要的一点是OpenResty里的LuaJIT支持FFI,可以直接调用C接口,扩展性极高,而njs这方面的能力为零,只能限制在vm里。
作者回复: 说的挺好。
其实Nginx最初的模块设计就是想把配置文件弄成语言的形式,通过模块实现指令来增加语言里的词汇,但Nginx的配置文件修改后必须重启,而且C模块开发太麻烦。
OpenResty引入Lua后C模块开发的就越来越少了,因为脚本语言比简单的指令更灵活,开发的成本也更低。
作者回复: openresty在CDN等领域用的还是很多的,很多大公司也在用,比如阿里京东。
作者回复: OpenResty出来的比较晚,而且在最近几年才开始商业化推广,自然要比Nginx的市场份额要少一些,相关的资料也少,不过最近OpenResty的市场占有率已经开始快速增长了。
OpenResty其实就是Nginx加上一些非常有用的开发组件,本质上还是Nginx,但开发起来更方便。但因为它多了Lua等其他东西,功能已经不再是单纯的web server,所以用起来要复杂一点。如果是单纯搭建网站,没有二次开发的需求,自然很多人会出于简单的目的选择Nginx,但我觉得选择OpenResty会更好,更有潜力。
作者回复: 目前是这样,需要操作系统底层有epoll、kqueue等系统调用,然后基于这些系统调用实现reactor、proactor等模式,也就是多路复用。
作者回复: Android系统不了解,欢迎补充。