@@ -19,18 +19,18 @@ libgo是一个使用C++11编写的协作式调度的stackful协程库,
19
19
libgo有以下特点:
20
20
21
21
* 1.提供golang一般功能强大协程,基于corontine编写代码,可以以同步的方式编写简单的代码,同时获得异步的性能,
22
- * 2.支持海量协程, 创建100万个协程只需使用2GB内存
22
+ * 2.支持海量协程, 创建100万个协程只需使用2GB物理内存
23
23
* 3.允许用户自由控制协程调度点,随时随地变更调度线程数;
24
24
* 4.支持多线程调度协程,极易编写并行代码,高效的并行调度算法,可以有效利用多个CPU核心
25
25
* 5.可以让链接进程序的同步的第三方库变为异步调用,大大提升其性能。再也不用担心某些DB官方不提供异步driver了,比如hiredis、mysqlclient这种客户端驱动可以直接使用,并且可以得到不输于异步driver的性能。
26
26
* 6.动态链接和静态链接全都支持,便于使用C++11的用户静态链接生成可执行文件并部署至低版本的linux系统上。
27
27
* 7.提供协程锁(co_mutex), 定时器, channel等特性, 帮助用户更加容易地编写程序.
28
- * 8.网络性能强劲,超越ASIO异步模型 ;尤其在处理小包和多线程并行方面非常强大。
28
+ * 8.网络性能强劲,超越boost.asio异步模型 ;尤其在处理小包和多线程并行方面非常强大。
29
29
30
30
* 如果你发现了任何bug、有好的建议、或使用上有不明之处,可以提交到issue,也可以直接联系作者:
31
31
email: 289633152@qq.com QQ交流群: 296561497
32
32
33
- * samples目录下有很多示例代码,内含详细的使用说明,让用户可以循序渐进的学习libgo库的使用方法。
33
+ * ** samples目录下有很多示例代码,内含详细的使用说明,让用户可以循序渐进的学习libgo库的使用方法。**
34
34
35
35
36
36
##### libgo的编译与使用:
@@ -136,3 +136,38 @@ libgo有以下特点:
136
136
4.未定义行为:在Linux系统上开启了ENABLE_SHARED_STACK参数时,协程栈上的对象不可被协程外部访问。
137
137
由于采用共享栈的方式调度协程,协程处于非执行状态时,栈上对象会被保存到另外一块内存中,因此会失效,
138
138
此时通过保存的地址访问栈上对象是一种未定义行为。有共享需求的对象请将其置于堆上或使用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