Tor源码文件分析 -- Cpuworker

本文详细介绍了Tor程序中的Cpuworker模块,它利用线程池分担主进程压力,尤其在处理CREATE请求计算对称密钥时。文章阐述了Cpuworker的初始化、工作流程以及对称密钥生成的细节,强调了其在提高服务效率中的作用。
摘要由CSDN通过智能技术生成

  我们知道,对于Tor的服务器来说,有的时候因为其访问量巨大,不得不采取一些相应机制来保证服务的正常提供。在服务器编程里,我们经常可以用到的技术,例如线程池,多路复用等。Tor程序,在大多数情况下,都是单进程运行的,几乎没有哪里用到多线程的操作。正因为如此,Tor的主进程才绝对不允许出现阻塞式的操作。但是,唯独在一处,Tor为了提高自身效率,利用了线程池类似的机制。这个部分就是Cpuworker。本文就主要介绍该模块的作用和实现机制。

  简单的说,Cpuworker存在的目的,是为了利用线程池的机制分担Tor主进程的压力,帮助其在接收到CREATE请求时计算对称密钥。下面进行具体的过程描述:

  1. 系统启动时根据主机CPU数量,初始化cpuworker线程池;(linux中线程和进程基本无差别)

    cpuworkers_rotate()

    1.1 根据配置文件配置选项,自适应地检测CPU数量或固定设置CPU数量;

      spawn_enough_cpuworkers()

    1.2 根据CPU数量,开启cpuworker线程;(最大数目为16,最小数目为1)

      spawn_cpuworker()

    1.3 开启线程之前,创建sockpair,创建cpuworker连接,关联cpuworker连接与sockpair[0];

    1.4 开启线程之时,设置线程执行函数cpuworker_main,关联线程与sockpair[1];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值