💡
原文中文,约1300字,阅读约需4分钟。
📝
内容提要
Erlang的Port通过独立进程与外部程序通信,而Port Drivers则将C/C++动态库加载到虚拟机中,性能更高但风险更大。Port是Erlang与外部程序的基本通信方式,Port Drivers直接在虚拟机内运行,存在内存泄漏风险。两者的创建和运行方式不同,Port Drivers在调度时注册IO任务。
🎯
关键要点
- Erlang的Port通过独立进程与外部程序通信。
- Port Drivers将C/C++动态库加载到虚拟机中,性能更高但风险更大。
- Port是Erlang与外部程序的基本通信方式,提供双向字节流。
- Port的所有者进程负责与外部程序的通信,所有者停止时外部程序也退出。
- Port Drivers是内联的Port,不创建新的OS进程,直接在Erlang进程中运行。
- Port和Port Drivers的创建方式不同,Port通过erlang:open_port创建,Port Drivers需先加载后创建。
- Port运行在Erlang虚拟机外,不共享进程,避免内存泄露和崩溃;Port Drivers与虚拟机共享进程,风险更高。
- Port创建时会导致整个beam.smp进程阻塞,而Port Drivers性能更优。
- Port Drivers的调度通过erts_port_task_schedule函数实现,注册IO任务并放入RunQueue。
🏷️
标签
➡️