Erlang 的Port Drivers

Erlang 的Port Drivers

💡 原文中文,约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。
➡️

继续阅读