作者回复: 显然是看进去了。
作者回复: 这块是我的疏忽,应该直接赋值的,可能是开始我撰写的时候channel对象的初始化放到了event_loop_handle_pending_add函数中,后来把channel对象的初始化重构到外面,这里忘记删掉了。
已经更新文稿(待周一编辑更新)和github代码,感谢指正。
作者回复: 这个是通过下面的方式在头文件中声明:
extern const struct event_dispatcher poll_dispatcher;
extern const struct event_dispatcher epoll_dispatcher;
作者回复: 这里是位与操作,举个例子,EVENT_READ可能为二进制的00000010,如果有可读事件发生,那么在这个位上的bit值一定位1,这样位与的结果就说明这个事件发生了。之所以采用位与,而不是位或,是因为只需要关心这一种类型的事件。
作者回复: channel里的fd是在有连接建立时创建好的,当然,也是被设置为非阻塞的,这里channle对象不需要关系fd的属性。
作者回复: 好问题,我试着解读一下:
第一,Java有JVM实现,在Java的世界里,它的对象是统一被JVM管理的,包括GC,对象管理,基于这一层考虑,它不可能使用系统级别的对象内存管理,这两个没有办法调和,就像你举的例子,如果我们创建一个类似ReallocList对象,那么这个对象的内存管理完全不是JVM那套了;
第二,JVM是一个跨OS的实现,我不知道是否Windows也有类似realloc函数,这样就需要JVM做到跨OS的直接内存接管,这和Java的思想是不一致的。
作者回复: 放到统一答疑里了。
作者回复: 统一答疑中解释。
作者回复: 统一答疑中解释。
作者回复: 统一答疑中解释。
作者回复: 笔误,已修复。
作者回复: 是操作系统提供的能力就是这样,大家都这么发挥了。