程序中监听的含义?

2019-09-11 20:18:27 +08:00
 smallpython
是不是就是说死循环去访问一个资源?

比如监听端口

就是一个死循环的程序去检查这个端口有没有数据被传输进来?

如果是的话,那么每次检查的间隔时间一般都设置为多久呢?
7312 次点击
所在节点    程序员
47 条回复
no1xsyzy
2019-09-12 20:41:29 +08:00
@lilydjwg #24
> CPU 是先复制网络数据到内存里,再决定要如何处理。因为网卡的存储空间有限,你不及时处理就丢包了
你看没看新闻…… Intel 因为让网卡能够直接访问缓存导致了漏洞
所以不一定进内存
baixiangcpp
2019-09-12 20:53:37 +08:00
这个算不算读书读的不多,想的太多(无恶意
okwork
2019-09-12 21:00:00 +08:00
网卡接收的信号,和敲击键盘的信号本质都是一样电信号变化,监听的优先级看系统逻辑。比如可以通过网络远程开机、也可以通过键盘密码开机,感觉应该是一个等级的监听。
no1xsyzy
2019-09-12 21:38:20 +08:00
@lilydjwg 其实我就是想提醒你加 pv

慢点,难道不是 “gdb 是直接调用 ptrace 的,所以是直接使用接触软中断” 吗?
ptrace 不就是软中断入口吗?不然直接插 x86 的被调指令?那是硬中断……
jedihy
2019-09-13 03:49:12 +08:00
其实这个问题本质上是在问 kernel 如何通知 usermode app 事件的完成。

以 Windows 为例:

那这个实际上是有轮询的,但不是简单的轮询,是一个很复杂的,由 kernel thread scheduler 参与的等待过程。

kernel 通知 usermode app 的情况,app 一定 pending 在 KeWaitForSingleObject,等待 kernel return。

( callstack: WaitForSingleObject->NtWaitForSingleObject->KeWaitForSingleObject )

简单的说,在这个等待过程开始时,kernel 会设置 thread 的 scheduling state 为 waiting,然后将此 thread 放入一个 waiting list,当你 singal 一个 event 的时候,kernel 会在这个 list 中找出这个 thread,然后把它移出,然后 KeWaitForSingleObject 返回。这个时候你就知道你等待的事件被 signal 了。

Linux 不太清楚,但现代 OS 设计大致都应该如此。Busy loop 会直接跑满一个 logical processor,所以不会有 OS 这样设计的。
b00tyhunt3r
2019-09-13 14:04:53 +08:00
@smallpython csapp 第八章
smallpython
2019-09-17 11:24:03 +08:00
@baixiangcpp 是的,但是有时候我觉得抛出一个问题然后看大家讨论,也能学到很多,而且效率高一些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/600158

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX