@@ -19,18 +19,18 @@ libgo是一个使用C++11编写的协作式调度的stackful协程库,
1919libgo有以下特点:
2020
2121 * 1.提供golang一般功能强大协程,基于corontine编写代码,可以以同步的方式编写简单的代码,同时获得异步的性能,
22- * 2.支持海量协程, 创建100万个协程只需使用2GB内存
22+ * 2.支持海量协程, 创建100万个协程只需使用2GB物理内存
2323 * 3.允许用户自由控制协程调度点,随时随地变更调度线程数;
2424 * 4.支持多线程调度协程,极易编写并行代码,高效的并行调度算法,可以有效利用多个CPU核心
2525 * 5.可以让链接进程序的同步的第三方库变为异步调用,大大提升其性能。再也不用担心某些DB官方不提供异步driver了,比如hiredis、mysqlclient这种客户端驱动可以直接使用,并且可以得到不输于异步driver的性能。
2626 * 6.动态链接和静态链接全都支持,便于使用C++11的用户静态链接生成可执行文件并部署至低版本的linux系统上。
2727 * 7.提供协程锁(co_mutex), 定时器, channel等特性, 帮助用户更加容易地编写程序.
28- * 8.网络性能强劲,超越ASIO异步模型 ;尤其在处理小包和多线程并行方面非常强大。
28+ * 8.网络性能强劲,超越boost.asio异步模型 ;尤其在处理小包和多线程并行方面非常强大。
2929
3030 * 如果你发现了任何bug、有好的建议、或使用上有不明之处,可以提交到issue,也可以直接联系作者:
3131 email: 289633152@qq.com QQ交流群: 296561497
3232
33- * samples目录下有很多示例代码,内含详细的使用说明,让用户可以循序渐进的学习libgo库的使用方法。
33+ * ** samples目录下有很多示例代码,内含详细的使用说明,让用户可以循序渐进的学习libgo库的使用方法。**
3434
3535
3636##### libgo的编译与使用:
@@ -136,3 +136,38 @@ libgo有以下特点:
136136 4.未定义行为:在Linux系统上开启了ENABLE_SHARED_STACK参数时,协程栈上的对象不可被协程外部访问。
137137 由于采用共享栈的方式调度协程,协程处于非执行状态时,栈上对象会被保存到另外一块内存中,因此会失效,
138138 此时通过保存的地址访问栈上对象是一种未定义行为。有共享需求的对象请将其置于堆上或使用channel。
139+
140+ ##### Linux系统上Hook的系统调用列表:
141+ *
142+
143+ connect
144+ read
145+ readv
146+ recv
147+ recvfrom
148+ recvmsg
149+ write
150+ writev
151+ send
152+ sendto
153+ sendmsg
154+ poll
155+ select
156+ accept
157+ sleep
158+ usleep
159+ nanosleep
160+
161+ 以上系统调用都是可能阻塞的系统调用, 在协程中使用均不再阻塞整个线程, 阻塞等待期间CPU可以切换到其他协程执行.
162+
163+ *
164+ close
165+ fcntl
166+ ioctl
167+ getsockopt
168+ setsockopt
169+ dup
170+ dup2
171+ dup3
172+
173+ 以上系统调用不会造成阻塞, 虽然也被Hook, 但并不会完全改变其行为, 仅用于跟踪socket的选项和状态.
0 commit comments