joshu 最近的时间轴更新
joshu

joshu

V2EX 第 234944 号会员,加入于 2017-06-11 10:25:29 +08:00
今日活跃度排名 9217
joshu 最近回复了
广州郊区电信,公网双栈
你是否有没有在用或在用的网卡(比如无线网卡,虚拟网卡等),填写了一个你当前不可达的 DNS 地址
感觉算是常规操作了
之前为了测试应该映射哪些端口抓过 ps remote 的探测包,结果返回的结果里面既有我 PS 机器的内网 IP ,也有对应的外网出口 IP ,两种连接都会尝试进行连接,如果不行的话可能连不上,也可能走中转机器
36 天前
回复了 zwgf 创建的主题 宽带症候群 电信 299 元永久升级 1000M 带宽 真的爽
@yyy134341 有人说电信 app 上有个“宽带大提速宅家乐趣多”的活动
千兆可以实现 100 上
过去的游戏宽带 200M 下也可以(
36 天前
回复了 HKD 创建的主题 宽带症候群 广州电信双栈上传速度
很多条连接也许是这样
两条连接( v4/v6 )试了下,看监控图大概是跑 14.3MiB/s ,也就大概是 120Mbps 左右吧,符合我对电信宽带冗余量的预期。。
40 天前
回复了 zwgf 创建的主题 宽带症候群 电信 299 元永久升级 1000M 带宽 真的爽
@evanchicken 没有变更终端设备
40 天前
回复了 zwgf 创建的主题 宽带症候群 电信 299 元永久升级 1000M 带宽 真的爽
@evanchicken 我原来是 169 的,改成了 229 ,叠加-60 的优惠
43 天前
回复了 kingofzihua 创建的主题 Linux 问一个协程方面的问题
如果我对连接池的理解没有错的话,我觉得传统的 pool 模式连接池之于 single 模式(大体上类似于 http2 那种利用的形式,或者说 pipeline ?),类似于线程池之于协程,这两样事物的思想上有共通之处。单独地谈线程与协程的关系没有太大意义,因为协程某种意义是作为一种通用的形式出现,来解决线程池所存在的问题的。协程的某些实现也不是脱离线程池存在的,它更多的是改变了线程池里的工作线程的底层逻辑。

池模式是用来解决资源分配问题的。首先就是资源有限,不管连接(毕竟由内核管理)也好,线程(和 CPU 核心挂钩,一般计算密集的会和某个核心进行绑定)。而这个资源受限不仅体现在内存占用上,还体现在创建和销毁以及切换和使用上,换言之,如果连接(特别是短连接,会引发 TIMEWAIT 之类的问题)以及线程的创建和销毁代价都和复用一样,那连接池和线程池就不会有存在的意义了,因为我可以无限地开连接和线程,无需额外管理,一切都交给系统来完成就行,但实际上这样做的负面代价较高
第二个问题则是,资源的独占。
我所理解的连接池,当某个线程使用了传统的 socket ,这个 socket 在得到对端的返回之前便是独占的,独占意味着这条连接不会在返回结果之前回归连接池。
类比一下线程池里的线程,线程池的一个经典使用模式就是消费阻塞队列里的任务,当一个线程在消费队列里的任务时,其它任务是无法抢夺这个线程的使用权的,对于计算密集的任务而言,这其实没有什么不好的,但对于 IO 密集的任务而言,事实上线程在等待 IO 返回的时候处于闲置的状态,这一段闲置状态由于没能主动释放资源,其它任务也得不到消费,产生了资源浪费。这时候我们一个可能的做法是对于 IO 密集类的任务开一个大一些的线程池,由操作系统来切换处于阻塞状态的线程。
所以,对于连接池来说,使用 singel 模式进行替代,使得一条连接可以被多个调用者直接复用,连接除了少数状态之外都处于共享可用的状态,调用者不需要因为连接池无可用连接而被阻塞,或者是去开一个临时的短连接。调用者在等待对端回复消息的同时,其它的连接也可以向这条连接写入消息,并等待对应的回复报文。
对于协程而言,其消费的对象并没有发生本质的改变,改变的只是线程的逻辑。在这里,协程的概念更类似于其消费的对象(或称之为任务)的一个完整生命周期,一个协程可以由 A 线程处理,也可以由 B 线程处理,也可以先由 A 线程再由 B 线程处理,即协程不与线程绑定(某些实现是这么做的,但也有实现是与线程绑定的)。
一个协程在遇到 IO 等待的时候,会主动让出线程的使用,把自己塞入等待队列(或者由继任者将其塞入等待队列,或者无继任者时由默认逻辑的空转逻辑将其塞入等待队列),直到 IO 等待结束(可能是定时器超时,或者得到了对端的返回),由对应的对象将等待队列的协程中加入到就绪队列中等待业务线程的调度。总而言之,就是线程的业务逻辑在操作协程,只不过通常的线程池业务逻辑是直接消费任务,而这里的线程是在处理协程的流转。
因为协程有状态,有上下文,所以某些实现方法就将这一上下文存放在栈空间上,通过切换堆上的存放的栈空间来实现协程任务的切换(比如说恢复寄存器变量来实现这一目的)。
通常协程框架的实现方法我见过两种,一种是真的去 hoook socket 族的函数了,于是你调用 C socket 族函数时,实际上调用的是被 hook 的函数。另一种是实现了一套完整的生态,对 socket 、锁、定时器之类的逻辑做了封装,如果要正确地使用这一种框架,就必须使用这些封装后的类库,而不是原生的系统调用。
以上关于协程的解释只是其中一种实现方法,不同的库可能有不同的实现。

golang 的一个优点其实是它的协程不像某些协程框架那样,是主动切换的。它有类似于时间片的概率,会在协程时间片到期后切换协程,从而更具实时性。另外它实现了一个通用的阻塞队列,也就是 channel ,当然 channel 的灵活程度是比阻塞队列要高一些的。因为它解决了这两个问题,所以使用一些多线程的业务的使用门槛变得低了很多。
是的,持续大半个月以上了,丢包丢到不太能用的水平
43 天前
回复了 zwgf 创建的主题 宽带症候群 电信 299 元永久升级 1000M 带宽 真的爽
广州电信前几天打电话推销了
合同 229 一个月,老用户叠加-60 优惠,合同标记的宽带是 300M ,实际开的端口是 1000 下 /100 上宽带,比我想的好一些
关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2650 人在线   最高记录 5497   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 11:04 · PVG 19:04 · LAX 03:04 · JFK 06:04
Developed with CodeLauncher
♥ Do have faith in what you're doing.