Jac*_*ack 12 networking ocaml tcp
我想知道OCaml在性能和易于实现方面是否表现良好,同时在多线程环境中处理TCP上的典型客户端/服务器交互.我的意思是一些非常典型的东西,例如每个客户端有一个线程接收数据,操作变化在游戏状态并将它们发回给客户.
这是因为我需要为游戏编写一个服务器而且我总是在C中做这些事情但是从现在开始我知道OCaml我很想知道它是否可以,或者我会发现自己试图解决一个典型的问题.语言不适合..
提前致谢
Pas*_*uoq 10
表现:可能不是.OCaml的线程不提供并行执行,它们只是构建程序的一种方式.OCaml运行时本身不是线程安全的,因此唯一可能并行执行单个OCaml线程的代码就是接口C代码(没有回调到OCaml!).
实现方面,运行时有一个互斥锁,它在调用阻塞C原语时释放,也可以在调用执行重要工作的C函数时释放.
易于实施:它不会改变世界.您将拥有OCaml的舒适感和侧面的类似pthread的库.如果您正在寻找新的东西,同时利用您对OCaml的了解,我推荐Jocaml.它与OCaml同步,但最近有一个(重新)重新实现,即使它稍微不同步,它也很有趣,并且是并发程序的全新视角.
Jocaml是在OCaml之上实现的.什么与运行时不兼并和所有,我几乎可以肯定它使用单独的进程和消息传递.但对于你提到的应用程序,它应该能够做得很好.
OCaml非常适合编写网络服务器,尽管Pascal观察到,线程存在限制.
但幸运的是,线程并不是组织这样一个程序的唯一方法.的LWT库(用于轻量线程)提供异步I/O的抽象那是相当易于使用(尤其是当与位的语法的支持相结合).一切都在一个线程中运行,但它都是由异步I/O循环(基于Unix select调用构建)驱动的,并且编程风格允许您编写看起来像直接代码的代码(避免执行异步的大部分正常代码开销)许多其他语言的I/O).例如:
lwt my_message = read_message socket in
let repsonse = compute_response my_message in
send_response socket response
Run Code Online (Sandbox Code Playgroud)
读取和写入都发生在主事件循环中,但是您可以避免正常的"读取,在完成时调用此函数"手动开销.
| 归档时间: |
|
| 查看次数: |
3904 次 |
| 最近记录: |