所谓读了原始码却不实作与验证, 那不过就是对原始码的意淫而已, 所以在这个系列文的结尾总是还要写点东西的。
但因为还有太多部分没聊到, 所以我临时把最後要完成的实作改成模仿我们前面读到的 Node 原理做出来的小程序, 希望可以验证一下我们前面学到的东西。
利用最简单的方法, 依照 Node 原理编写一个程序具有可以处理非同步方法的环境, 并且具备几个非同步方法供人调用。
打算在程序创建之初建立一个环境, 而这个环境支援数个非同步方法, 建完环境後就可以执行任意程序码。
以下说明想要支援的非同步方法
console_timer
特定延迟秒数後 console logconsole_file
读取 local file 的文字, console log 出来console_encryption
加密替定文字後 console log 出来console_decryption
解密特定文字後 console log 出来而环境的构成分成仅有一条 thread 的 event loop 和 有任意条 threads 的 thread pool
以下叙述 event loop 细节
console_timer
这类定时方法时, 调用介面把定时事件放入 event loop 中属於 timer_stage 的最小树。console_file
这类系统 IO 方法时调用 OS API 且注册 IOCP 事件, 如此当 IO 结束 event loop 的 polling_stage 就可以收到该 IO 事件的结果了。console_encryption
, console_decryption
这类密集 CPU 型方法被 thread pool 完成时透过 IOCP 方法送出结果, event loop 的 polling_stage 就可以收到该 IO 事件的结果了。以下叙述 thread pool 细节
console_encryption
, console_decryption
这类密集 CPU 型方法产生的事件加入 lock-free stack 只要 TP 中的 thread 闲置, 就会去 stack 取出一个任务来处理。最後贴上程序码, 其中有大量注解, 希望帮助大家看懂。
https://gist.github.com/leon123858/5b270a3c57f8744c4e4a334eb57f282e
这个系列文写到这边算是画下一个句点了, 其中内容大多是我阅读原始码以及官方文件所得来, 这些东西真的是有点硬, 而且我这次又是挑选了 IOCP 路线来说(文件基本上都是 epoll 的版本), 导致我很多地方都只能半猜不猜得过去, 要是我有讲错说错可以跟我反映, 我会做修订。
不得不说, 30 天真的很短, 很多想写的都还没写到就已经结束了。还有蛮多想聊的都还没说到, 包含 node 中 await 的原理, threadpool 的 scheduling , .......... 等等。不过我想这篇不是完结, 我未来应该会把我在第一天中, 设定想写的目标写完, 那就暂时先跟大家说 bye bye 啦
<<: {DAY 18} Pandas 学习笔记part.4
>>: Alpine Linux Porting (一点九?)
看过很多文章提到程序设计师接案的陷阱,因自己非本科出身,所以觉得这些陷阱都不会发生在自己身上,再加上...
名称的由来 Bluetooth是斯堪地那维亚语言的Blåtand/Blåtann 借10世纪丹麦和...
Core KTX 包含的module有: androidx.core.animation andro...
接下来我们要针对基本变数型态做一些简单的介绍,以及超级重要的阵列!那这篇先以variables为主。...
程序,资安是我生命中的意外 国高中从没想过这些 我从小六的目标就是当外科医生 因为我深受怪医黑杰克,...