Java NIO分析(4): I/O多路复用之poll系统调用

poll系统调用主要解决了select系统调用的2个问题:

  1. 文件描述符数量(fd_setsize = 32)太小, 而且数值是使用宏写死的,这样在32位机器上最大文件描述符数量只有32*32=1024
  2. 文件描述符集(fd_set)这种值-结果参数的api设计不是很好, select系统调用的时候要分别传读set,写set,更多事件不好细分

poll系统调用使用了pollfd数据结构来表示事件数组,没有了fd_setsize的限制,同时支持更多的事件类型

……

阅读全文

Java NIO分析(1): Unix网络模型

要谈Java的NIO, 还是先从I/O开始说起。 Unix提供了5种不同的I/O模型,分别是

  • 阻塞I/O(blocking I/O)
  • 非阻塞I/O(non-blocking I/O)
  • I/O复用(I/O multiplexing)
  • 信号驱动式I/O(signal-driven I/O)
  • 异步I/O(asynchronous I/O)
……

阅读全文

luminus整合shadow-cljs打包

shadow-cljs是新一代的cljs打包工具,比起以前的cljsbuild和figwheel的优势主要是:

  1. 支持直接引用npm依赖, 以前还需要使用cljsjs转一次,不仅麻烦而且还是过时的
  2. 和webpack类似的代码分割, 依赖

当然,cljs+css代码重载是最基本的,而且构建速度也足够快

……

阅读全文

使用clj1.9快速启动clojure的repl

随着Clojure1.9的发布,给我们带来了spec和命令行的支持. mac下通过HomeBrew可以快速安装最新版clojure,自带clj命令行工具

1
brew install clojure

linux平台按照

1
2
3
curl -O https://download.clojure.org/install/linux-install.sh
chmod +x linux-install.sh
sudo ./linux-install.sh

然后通过clj命令就可以快速启动clj的repl. 原来用lein replboot repl启动需要1分钟,clj命令启动只需要短短的几秒。

……

阅读全文