此次机制对吧？ Greet机制。
然后我们继续一起诶，焦点不在这块。
然后就是为什么我们有这个，我们为什么说异步非常的必要，就是不知道大家有没有这种体验，就是你有一个nfs，它在远程，然后这台服务器你如果拼一下，你会发现延迟大概有100多毫秒，然后在这样的这个nfs上工作是非常痛苦
的，这件事情就是你会发现，比如说你运行上面一个程序，然后你需要大概等于五到十秒会有下一步的回应。
然后你在这种在这种assign上工作都非常的痛苦，然后你发现你运行的时候反映了三秒，它还没有执行出结果。
这个时候你发现你的写的有问题，然后你想把它cue掉，然后你会发现操作系统正在世俗读这个binary。
然后你control c你也Q不掉他，然后你想要比如说你想要qu酒之类的事情也不是那么容易实现，就是他完全的可能会力度或者地补，就是。
你那时候Q了，你就怎么充气了。就是这件事情，尤其是在我之前是windows用户，尤其是在linux上非常的痛苦就是你知道如果是windows上的话，你在任务管理器，你Q不要的只可能有一种就是这个东
西，它hook了，或者是它权限不够，比如说什么主动防御点EE， c这种东西你很难cue掉，但是如果是一个访问远程的这个服务器的话，那还是比较容易的，就是它几乎不会被这个卡住。
而在linux上就非常的痛苦。
然后此外，这块有一个非常好玩的事情叫做是allowing，他在五点大概5:19的版本新增了一个op叫就是把它把society做成了异步的就是创建society，这件事，他到底需不需要一步是兔场来说，我
们去想说，我们创建一个topic大概是不需要的。
但是有一回有人提醒我说，如果我想带一个nfs上创建一个udi，就是创建一个unix society，对，对，对，你实际上是在创建一个文件对吧？
但假如这个nfs它延迟了1451次毫秒，那么这件事情就他也会非常的骂。
但是我后来查了一下，就是说未来彩色上创建的UDS实际上是不可能沟通两台机器的，就是因为UTS它本身是一个本地的行为，就是你非要在上面创建，也可以，但是它仍然只能在这同一台机器上用。
当然了， society的其实总来还有很多，所以说也许他就确实需要一步。
那么所以说引出来我们今天的这个主角，这个东西是基本上是我主推的。
当然现在没tenner，不是我有一个人，然后这个东西都要compule是一个基于russ的异步运行式，然后它最主要的特点呢，有这样子，比如说他跨平台，这个不要小看跨平台这件事情其实没有多少人做得到，尤其是在
跟iouring有关的。目前我发现我这个应该是第一家，就是猫狗io就是字节跳动了他们那个到目前为止，他们还不能成功地在windows上编译，然后是blommyo，它是完全的基于iouring，然后
最近好像是还有一个什么样的项目然后他们甚至写了一篇blog，我还忘了那个项目的名字了，因为他其实他，他在readmy里面说他支持windows，但是他实际上windows是在一个pr里还没有合
并。
对，然后这个东西呢？你会发现我只写了minix，因为mac上其实没有特别好的情况，所以在mac上必须还得用qq，然后你想读文件的话，基本上你就只能再另外开一个线。
程值，把它变成地步的。所以呢，就会说就是其他情况下他会退回到传统的这种no blocking的部然后，下面给出来的是一个非常简单的事例，就是。
如果你这样，你看其实跟其他的running差不多，但是其中有一个非常有特点的地方吧。马上就要讲，我们在这之前我们要讲一个过年的故事，过年的时候大家都会说到红包。
然后不知道大家小时候有没有这样的经历，就是就是自己的父母，妈妈或者爸爸会跟你说说我先给你把红包保管起来。
等你要用的时候，我再给你，然后你就会发现，你逐渐比如说过了一年之后，你就会把这个红包忘了，然后这个钱你就再也找不到了。
那么这个钱到底在谁手里呢？我们所要讲的其实就是这样一件类似的事情，就是computer为什么它的这个api看起来有点奇怪比如说我们的RSTD里面你实际上你传给read是一个的，可变引用，但是如果你去
computer里面的话，你实际上是要把整个buffer的错误全传给哈传给这个api，然后等他完成之后，你在你发会了。
这个主要原因其实就是内盒需要把你的红包保管起来。
好的。你提到了这个重点，就是这个东西，它有一个。
我们最主要其实就是为了内存安全问题，它是这样的一件事情，就是就是我，我马上就要讲到，就是他基本上基本上是这样，一个原因就是你知道为什么？
妈妈一定要把你的红包保管起来，因为妈妈想，奥运这部分钱对吧？
工厂来说是这个原因。那么这个时候你有可能发生什么事情？
如果红包带你手里，比如说你有可能忘记了，然后这个红包就他相当于就toning对吧？
然后你有可能搬家了，然后你把这个红包搬走了，妈妈想要拿的时候就发现不见了，然后比如说你有可能直接把这个红包的钱先拿走了。
对吧？具体到这个，具体到rax的代码中是这个样子的，就是如果你只是给了那盒一个可变应用，确实就是当这个feature这个当这个feature完成之前，你是没有办法，更改这个里面的内容的。
但是呢，我可以把整个fileshower照顾掉，对吧？
我可以把这个feature给drop掉，然后这个时候呢，包括checker就会以为说你把这个你把这个任务取消了，然后现在已经没有什么东西保管着你的feature的可变引流，然后在照不掉这个feature之后，你可以drop掉这
个发和。
但是真的没有人保管这个八分的饮用了吗？其实那盒儿还拿着巴份儿的纸分对吧？
你dave掉了这个feature，但是那份不一定会立即取消这个任务，因为整个这个任务是完全异步的，你照不掉之后他有可能还在读，他有可能读到一半被你抓获掉。
这些事情都有可能发生，就是如果你是传统的地步，传统的异步，实际上是你等他reddy之后发了一个同步的read this call，所以在瑞德的过程中，你是不可能对这个任务做任何操作的。
但是如果是完全的这种异步的操作的话，你等待他的完成，那么你是有可能在那时在读或者写这段内存的时候，你把这个任务取消，但是你以为取消了，但实际上你不可能取消的掉他，要么没有复制，要么就一定要等他复制
完。
但是在它复制的过程中，你就有可能，你就有可能通过一些这个rac上的操作，你把这一段你把这一段内存给释放掉。
Esting job也不能解决这个问题。
对，但是我还可以。 Forget的。
我刚才好吃饱for getting调他的话我也可以再继续。
Job buffer.
我可以freeze掉这个files，然后job这个buffer。
For gate在russ中是安全的，你知道这件事情吗？
就是为什么覆盖的是安全的，因为曾经有人用RC和raff sil造出来了一个安全的那个循环引用，然后他说，内存泄漏并不是这个不安全的，要不就是你这个语言设计有问题，大家经过一通考虑之后，说好我们把
program给去掉。内存泄漏是安全的内存泄漏的安全带来的结果就是你可以内存泄漏掉一个，然后然后它的生存器就没了，然后编译器认为没有人保存这八份的引用了，然后你就可以照不了buffer，但这个时候实际上那时
候还拿着它的指针呢。
对啊好。
Pean本身是可以move和process的。
Pin本身是可以move和forget的。
不是信pin对象本身是可以move或者process的。
如果你把pin for get了，那么这个feature就可以说操作了。
身体状况。
我没有，不是，是防止你把信所指向的那段内存，或者说聘的那个指针。
但是pin本身是可以随机move的，它是说不能让你这个在不昂聘的时候拿到它的那个可变引用，因为你拿到口编引用你就可以把里面的东西目录走，但是聘本身是可以move的。
就这个这件事情，它对非常的伤脑就是就是大家经过无数次的尝试之后，目前所达成的一个共识就是在目前的语言环境下，你必须得让run time或者让这个那份儿拿到形式上，拿到他的所有权。
这让我想起来了，我最初搞computer这个项目的时候，然后有一段时间有一个看名字，像是东欧地区的，就是他叫什么样的资金。
然后有这么样一个老歌，然后非常感兴趣。他尤其感兴趣。
是一个iouring户端，当然我也非常欢迎他，然后他给我也确实提供了一些帮助，但是他过了一段时间之后就开始对这个api发那了，然后他想了一大堆，这个。
在生命周期上做操作，然后想办法呢，让右边的能变成左边的这种形式，然后被我这个一一的批驳了。
然后他最后说，不过他就把那个项目fock走了，然后自己搞了一份。
就是他觉得公布，但其实他的那个东西是on fond的，我可以直接用它那个api构造出来一个内壳仍然在用，但是实际上东西已经被召回，要的这个代码是肯定可以构造出来的。
比如说我在我在一个中心方面很抱歉，一个然后他整个人数对，但是实际上巴基斯坦不在feature里面巴菲已经被挪到内河了。
就是你再调用read buffer的时候，这个buffer并不会放进这个future里面。
这个巴佛会直接的和会挪到另外一个地方，这个这个地方。
对就是照顾的时候是一定不能照顾这个buffer。
这个buffer必须是就事也没了。然后这个任务也完成了。
这种情况下，你才能把它抓回掉。
我会不会立刻不会立刻就是？那下面下面这个问题，其实就是刚才大家所说的说妈妈不要拿我的红包了，红包放我这里好不好？
但是你会发现，如果妈妈一定要用你的钱，这件事情他们是不会同意你的，就是传递所有权确实是很麻烦的一个操作。
但是目前来说没有办法改进。那有没有什么思路说我们在语言方面去做一些视角，以期我们仍然可以只传一个可变引用，因为那个样子确实很方便。
那么我在这边提出来一种不同于大多数人所想的这个路子，就是大多数的这个路径是这个去搞eighteen job，但实际上aping job是不可能解决这个问题的。
然后我这块是这个，这个只是一种抛砖引玉吧。我说，能不能搞出来一种不能误误的类型，就是不能目的的类型，有没有什么有一种什么好处的，就是叫不管是job还是forget这种显示量的函数，一定是把东西move过去
了，但是如果这个类型它不能up，你就没有办法在它上完之后froget或者这样走。
对对你说的那种是更根本的方法，但除非他们愿意接受线性类型对，但是实际上那天有人跟我说你这个，你这个不能募其实并不能完全解决。
问题你知道吗？然后他们跟我说说，其实你可以创建，你首先创建一个box，然后maybe on you need t。
然后器是这个不能move的，然后你创建了这个mady young need的时候，你再把你那个feature一些搁进去，然后我说那不能不不就是不能募，怎么办？
他说，大概是可以。比如说一开始的时候把它创建进去，或者说比如说你一开始创建一个maybe innee的这个东西，然后你再把maybe youngee net他就可以move了。
然后目不到box里面，然后把他投给他掉。
就是这个东西我还不完全确定。说到底，你只是禁用了一个类型，不能目之后能不能解决，能不能解决，既不让不让他program，不让他这个job的问题，我还不是完全确定，对不过不能募的话你至少会发现说它装
不进智能指针的嘛。然后你就不能用智能指针构造一个安全的那个，那份泄漏了。
对，但是在智能指针里直接购到是不是目前来说没有safe的办法，也许你必须得用on safe，但是如果你用了啊，这一封，那就意味着我们安全了你如果用safe才能构造出来一个这个内存不安全的例子，那
是很正常的，对吧？
不就之前那个报纸对对对对对，我用对，但是现在已经没有box expression了。
你你正搞placement new，那这个东西不是没有办法不对， placement new也有目录，是吧？
这个问题不是流化学吧？其实没有办法直接放进去是不是好事是吧？
我们就不想在在这块儿，我就不想不了，他直接放上去。
我都不是啊，我可以再站上去。
意思就是你必须给我把它等完，你不能做任何其他操作。
不是。
对对，估计是这个样子的。但是没有关系，现在本身就是单线城的，我不怕，这个这个单线程是因为是这个样子的，就是那个写iorring的那个人。
他说了说iouring在内核这块呢，它确实是线程安全的，我给你们写的live iouring这个包装，它是单线程的，哈哈，因为我就喜欢这么优化。
对对对对对，实际上他就是，他就是希望你这么用，他就是他希望你如果写说太成的话，每个赛场上都可以。
然后不同的下乡自己去，或者自己去等待而另外是为什么a sing账户不能解决这个问题，就是其实就是这个样子，除非你把asing的forget也搞出去，如果你还可以a single forget，那这
个事都可以。
但是process为什么还可以演a think？
这件事情本身就很迷惑，对吧？
你说你都A清，可能你还要你，你还program干什么？
而且本质上他也不能解决问题，我仍然可以把它装进一个智能指挥，然后然后搞一个循环引用，然后他就泄漏了。
你好，在这个角度上，你不能使用这么高的。
对对对，但是如果你提前把它proget了，那他就会认为他没了对这个。
如果是on texas。
这个可以在帮我们。
就是就是除非你说编译器在运行的时候，他知道某些东西他会有副作用，对吧？
但这个东西实际上就更复杂了，就是如果你就是它会引入一种新的蓝色，就是有副作用的和没有副作用的，那是两种。
然后比如说什么，如果你练了一个有副作用的，那你这个也是有副作用的。
是。
因为疫情的照顾，它其实是用来解决别的问题的。
然后另外一个问题就是说有关安全的取消一个我们刚才说其实你把它drop之后呢？
你可能会往那会儿发送一个取消情形，但这个取消并不是立即就能成功的，因为可能你发送取消请求的时候，他正好把内存复制到一半。
这种情况下，他取消不了。
A sing job也没有办法解决这个问题，就是你把这个filter搞成asing的job可以，但是呢，就是有存在这样一种情况，就是你发送的取消请求，但是你发送取消请求之后这个任务他取消不了了。
然后呢，他正常的完成了，但是你又把这个QQ照破掉了，所以拿不到返回的数据。
比如说你往一个socket写了数据，然后你又太冒，他把它取消了，然后很有可能这个数据还是写出去了。
或者说你搞了一个listener，然后你想要occept child，然后你搞了个time out把它取消了，但很有可能。
这个child还是被还是被收到了，被收到了之后呢，你又不去处理，就直接把它drop掉了。所以你这个时候你写的服务器是很不可靠的，因为它很有可能会随机照顾掉一些client。
这件事情他们做那个motor io的那帮自己，自己跳动的人。
有一些大佬，他们特别关注这件事情，但是目前的这个语言上他们也不好搞什么，以他们搞了一个产several accept，然后你往里面传一个憨斗，然后你调用这个handle上的track sale，然后你再去await那个
future，然后你就能知道到底是成功的，这个取消了还是没有成功的，取消还是收到了一个client？
然后我大概想了想，有没有一些特别好的办法去搞这件事情，然后实际上我也没有想到特别好的，就是说怎么样对语言去做更改然后大概比如说我们可以搞一个chancellobe future，然后呢，有一个
pull tracel。为什么这个transfer它也是异步的呢？
是因为在ouring上取消本身是一个异步操作，然后呢， io urin如果你仔细去观察他的那个设计的话，他的那个queue都是有一个长度上限的，你在创建的时候，你创建了一个fixitary，那那个
q不是无限增长的，所以很有可能你把这个取消操作。
西郊到那河，你会发现你需要等一段时间，可能那会儿现在急的忙不过来。
所以本身取消也是需要等的。那当然这个东西也只是一个简单的设想。
可能并不是最好的。
然后此外呢，就会这个涉及到有关这个生存期的管理方式的问题，就是像我刚才其实也跟你们说了，就是说这个buffer到底是什么时候这个被抓不掉的，实际上他就是一个受挫的这个引用技术，然后他的最大值值
可能是二，因为就是filter保存着一个，然后那盒儿保存着一个，然后比如说file把它拆掉了，那它的引用技术就减一，然后是比，如说这个任务，它结束了，刚才引用技术，就前一，如果又把它传fail了，任务又结束了，那
你就可以把它照掉了。这样的引用技术方式可以最大程度的减少内存上的泄漏。
但是呢，这个过程它存在另外一个问题，就是它肯定是会有内存，就是它肯定会有类型擦除的。
有类型擦除意味着你需要box就是不同的buffer类型，你都想要装到同一片，那一分钟你一定要对他做box。
然后就会有装箱。
搞啊safe吗？
就是就是如果你去搞啊safe魔法的话，这个东西它就完全没有安全的方法去用。
你说我。
不是，就是就是如果你去说我这个内核这部分是on safe的，然后我外面再给它包一放， sip report，那你肯定还要在某个地方把它box。
因为这个数据本质上你要把它和内存放在一把，它和这个内存的这一块。
这个drever放在一起，所以这个装箱一直是无法避免的。
你一直要分配一块内存充电。
不可以对，因为他有可能再带。
对有站协商就没这么麻烦了是吧？我有阵先生，确实少很多啊对，确实是在这上面，所以你看够了，老早就是配living在你看现在rus上一个也不行，尤其是tokyo，他们做的那个tokyouring自己都弃了
了，我不甘心了。
我下面要找出来的啊对，下面我们来说这个经典的欺负老同志暴打投票，然后tokyo呢，是这个样子的，他的那个文件io。
七是做的非常的烂，就是那个他的整个file system的那一套东西做得特别的差。
因为呢，在他搞出来的时候， io u人还不太行，那个时候除了windows上的那个LCP，其他的操作系统上其实bsd上有al，那个我们后面说就是他基本上不想要那套东西了，但只想管着society的
一步，所以说文件都写，我们也想要一步，怎么办呢？于是他开了一个线上池，然后他把所有的这些东西都通过sport blocking搞上去，但其实还不完，全是又直接把std的东西给放block上去，他还想在里
面做一些阿富汗来提高效率，就是它不是每一个操作都spon blocking上去，他自己又准备了一个buffer，然后然后满了之后才去sun blooking之类的事情，然后他就做的特别灵车，然后
开销也特别大。然后所以说这个我们其实并没有做特别多的优化啊，专程说是没有做什么优化，他们有其实一开始写的时候希望是快速推写出来一个，所以其实又没有做什么优化，然后其实装箱也到处都是，但是已经基本上，
在bunch mark上爆大了topia就是你可以看到基本上要快至少一个说打字，不管是毒还是血，就是随机读。
然后顺序读一个文件，随机写顺序写一个文章，类的后面都是这个样子。
800大小说四k。
不是，是耗时。
STD，那这就是直接就是重复的事情。对，然后你会发现，现在这个异步运行形式，它没有重复的快，实际上就是就是你把monor io翻过来也没有。
对，但是特别有意思的是，其实我这块没有画model io，一个原因其实是版面不够的，就是如果你在line上其实和model来op，然后我必须得这个非常惭愧的承认说目前我们还比不上人家自己专门写的东
西。
Money io大概要在尤其是在读文件上要比我们的这个computer要快。他的那个基本上可以做到和std在同一个数量级稍微慢一点。
这是最关键的原因就是我不知道为什么，就是其实按道理来说就是装箱的话我要装箱太累。
装箱，如果你原来那次安全这些东西都一个也不能少，但是我不知道为什么他们有快速过。
对对对，然后我特别想把他们其中的一些大佬拉过来，然后帮我们看看。
但是目前还没有机会不明白不明白为什么会有那个差距，但是总之总是可以比特币要强，对吧？
然后现在其实大部分人都在用topic，尤其是像你们知道有一些那个框架比如说有一个叫torry的号称和宜兰船对标的那个框架，一个GUI的，然后它本身上是个wifi bee对，然后你后端就在上写，
前端用这个apml和七S之类的东西写然后那个东西它的那个异步就完全的就只能用topic，因为你想现在asink s t d已经死了，因为它没有io，然后那个主推去写了个small，然后small那个
东西。它最有价值的是我是对对对是account 1 系列的那些东西，而不是那个small本身。
那个small本身没有什么价值，但是他但是他是他属于那种we create就是他有一大堆create的组合出来，那些那些组合create非常有用。
是这个样子的。所以说，暴打完了老同志之后，这样一个来出一些有关这个api的事情就是其实这个东西主要是想说两件事情，就是首先呢，就是这个我在设计的时候希望能够把底层api也给暴露出来，就是那些直
接去操作内盒，调用内核，然后提交任务，然后去等待任务的那一套api暴露出来，报出来。这个呢？
其实主要原因是一开始我对我写的runtime并不是特别的有自信，本来想说，也许有人更看重底层封装的这套跨平台的东西，然后他想要自己做一个更高性能的runtime，然后来果然来的一个大哥然后他就
开始指责我说你这个应该接受，这个可编引用。然后后来他说不过，然后他就自己去post 1 份，就是刚才我们所讲的那个故事。
然后另外呢，其实在这个上面有一些更加花样的拓展吧，比如说我们实际上在computer这一套仓库是适配的trs，然后专门又抽出来的一个仓库去识别hyper，但是这件事情实际上比一开始设想的要复
杂的多，就是hyper本身，它非常的复杂，就是hyper。
当然， h g d p本身就是一个石山，大家都知道，然后这一套仓库呢，他们有些过于的复杂，就是他们把自己做到好像和这个特定的运行时无关，但他们呢，又坚持的不把TQ做成可选的依赖，那么坚持一定要用tokyo里面的
channel在某些地方to go to china确实是在任何一个义务形式上都能用，但是他们给出的理由是什么呢？
他们说，我们之所以不用future channel，而是用tokyo里面的channel，是因为我们奔驰mark过了这会儿用tokyo的这个性能更好那他们奔驰是在是在什么环境下分出面上呢？
我估计他们还是在tokyo下文吧。所以这件事情其实不是很能说明问题，但是他们已经坚持这么做了。
我给他们提了个pr，被他们关了，他们这回的理由是说我们现在已经1.0了，不想再接受什么新的，更改了。
就是不想再把QQ做成这个可选的了。
然后另外一个是这个vio，然后这个东西一开始是我们的一个愚人节玩笑就是如果大家这个看过，也许没有看到，就是我们其实那个computer有一个tt channel，然后愚人节那天我们发了这样一个东
西，说，我们成功的基于computer的这个就是它的那个异步的事件，循环之上，我们把goi想办法塞进去了，就是你想就是，不论是任何一个操作系统的这个TUI就是任何一个只有I框架，它本质上也是一个
事件循环。然后它有一个主循环，然后你想一步运行时，它也有一个主型吧。
然后我们就会想说这两个主军话，它可不可以是一个的呢？
然后事实证明他其实是可以是一个的。所以我们愚人节这天就发布了这样一个就是异步之UI抗战。
就是你里面所有的，比如说这个就是任何的控件等，待事件比如说窗口关闭事件什么按钮点击事件都是一个异步的feature，你只要这个future，然后如果来了这个事件，这个feature就会完成。
然后你就可以slan很多私帮很多任务，然后去做各种各样的这个handle，然后在这种情况下，如果想要异步的读文件或者做什么网络io，你一定不会卡斯UI，但是如果你反过来想要在里面做非常复杂的这个
paint，他可能会卡死io。
因为这个GOI的重会是同步的，他没有办法义务对吧？
然后这个东西如果如果你在那块重废了两三秒，那么你一定没有办法在重会的过程中响应文件已经读完了，或者是请除已经发完了。
其实不需要马上那里开两个线程，一个线程跑这个，另外一个线程。
而对，就是其实其实你重会，如果重飞的那么慢，他无论如何都是被卡的也无所谓了。
对，但是这就是我们把它作为愚人节完成的，原因就是就是现在现在这个到反天刚才就明白吧，就是平时大家写程序，一定都是io卡出ui，但是在这种情况下，我们只有可能用ui卡出io。
然后另外下面是讲一些非常扭曲的platform specific的一些cust的东西，然后由于他给我带来了非常大的困扰，所以我决定不能我一个人舒服然后我要在这里给大家讲一些好玩的事情。
首先是LCPL cp是windows上的一个东西，就是我其实是一个比较忠实的windows用户。
为什么呢？因为windows上的wsl比我装双系统要好用。
对我曾经装过双系统，后来发现还是wifi好用，要不然我想到另一个环境，我就得冲洗一遍电脑。
那你们为什么不要用windows呢？因为我还得打游戏是吧？
对，然后有些游戏它是只能在三分多从上玩的。
当然还有一个原因就是我用恩卡。
对。然后我们来说一说LCP，然后这个东西大概是已经有20多年的历史了，在windows上，而这个东西是一个典型的，就是你发送一个任务，然后那盒帮你完成完成之后通知你就是一个非常简单的这种基于完成
的异步，但是这个东西由于是你们知道温度四API那一套api经常设计的和其他系统的api，它划分完全的不一样。
他以比如说参数多，然后到处大写，然后还有比如说这个文档读起来非常的拗口，这个文明，所以说这个东西就会经常在各路资料中被妖魔化说我们现在来说一说这个非常难搞的LCP，虽然这个文档很难读，但是文档多
呀，我们来看一看吧，然后基本上都是这个样子的，但实际上它没有那么复杂，就是如果大家写稍微写过rus的话，会发现那合同有一类这个用来这个同步的东西叫channel， channel。
这个概念好像也是一些现代的语言中比较喜欢搞的对对对，然后channel就是ioct本身上是一个m pm channel就是多个多个发送端，然后多个接收端的一个channel。
就是它本质上就是这么样一个简单的东西，就是就是发送端的话，比如说可能是内核，也可能是其他的线程。
然后接收端的话也可以有多个然后你就可以在里面等等。
什么时候有这样一个pass过来，然后基本上就是你说我要写一个文件，然后内盒写完了之后就会往这个channel里面发送一条消息，然后如果你再等于都能拿到这条消息，然后你就说，写完了就是免这件
事。
但是windows api的真正问题见下就是LCT并不是唯一的分头子上的异步机制，然后众所周知， windows历史到现在已经有40年了，然后呢，在这之间他就诞生了许多的一部机制，其中包括
event机制，然后回调机制，然后apc，然后goi的message pue，然后还有温度的新增windows11新增的一个模仿iouring的玩意儿。
就，而且这些东西他们不一定可以互相协作。
所以说就是你，在用的时候，你会发现说这一部分io我可以用lcp，然后这一部分的异步我必须得用实践机制。
然后这一部分的东西我好像只能用回调，然后只有爱。
我只可以用message photo。第二是这样一种状态。
还有一些东西是完全没有办法一步，然后你只能把它搞到一个形成制。
然后另外，其实更大的问题是这个就是这个LCP这个东西，它实际上是一个并交，你知道吗？
而一旦你把一个file handle或一个socky撼动关联上的这个lcp，然后你就再也没有办法和他分开。
就是他实际上它实际上是这样一个操作，就是他这个关联操作实际上是把这个LCP的这个憨豆保存到了FOO object的某个地方。
然后呢，你只能保存一次，你不能删除，也不能改变，它完全没有提供这样的接口。
然后这就意味着说，比如说l using的话，其实是没有这样的机制，的，你当然可以把sd给这个注册到L优证里面，但是你可以把同一个可以注册到多百号U人，你也可以不注册直接用，但是如果是IOCP的话，它基本上
就是假设说这样一个bell handle就一定只和这一个io只和这一个call有关。
所以这个在比如说你想用相同的现成模式去搞拖延长的时候，这个东西非常麻烦，说我有一个我有一个listener，然后我不断的接收client，然后我就想像一样把client发到其他线程上去。
放学。
然后你就会发现你发到其他线程上去之后，它所做的所有的io请求可能还在你原来的这个线程上。
排队。然后如果你原来这个县城不倒在你看起来它就始终没有完成。
非常的扭曲，然后第二个好玩的事情实际上是这个我们把它叫做禁酒令，因为众所周知，有一个东西他叫外人然后这个外面东西被大家用来在这个linux上跑。
Windows的exe，然后通常来说它很好用，但是曾经是有这样一个故事，就是有一天突然的那个艺术上有人发了一篇非常长的艺术去谴责他们，原因是在某一个版本之后to q把这个LCP的这个适配改来了，然后他们改用了一个
on dota的问题的api，他们是直接去直接使用了一个没有没有文档的东西就是其实微软不希望你用的东西，然后他们去实际上是直接访问的那个网络驱动，然后那个地方呢？
有一套比较复杂的机制，然后你把它适配一下，它就变成了和一破差不多的东西。
然后他就变成了一个ready base的业务，然后大家都说这个东西好用，上了之后有人在外面上跑，这个投票编译出来的程序，然后他会说他会报一个找不到文件的错误。
然后他说我在搞，我在高网络请求我在创建QQ的这个运行时的时候，你给我来一个找不到文件。
然后他就完全不理解，于是他写了一篇非常长的艺术，声泪俱下的控诉偷q，如何的不道德，然后tokyo的开发者在底下就是回应说，不管你怎么说，反正我们都不愿意赶回去了。
而这件事情呢，就是它不仅在外面上这个东西它不能用了，然后uwp这个东西上也不能用，就是因为它本质上是一个没有没有文档的api，然后。
当时我们其实一开始想的是我们这回可以不用这套东西了。我们完全是conditionable，我们可以直接用完lct完全不用任何unlockering这个api。
然后呢，我们发现他在外面上还是疯了，因为可能用了一些别的东西，然后外还是疯了，所以我们只能把它称作禁酒令到目前为止。
好像唯一能支持外面的那个异步运行，实施small，因为smoke选择在万上直接使用那个特别老的那个pro。
来绕过这一点。
就是你想在上面搞点高兴的，不太可能，我或者说用russ搞高兴，能不太可能用C加加还是可以的，就是他们那套LCP机制是比较完整的。
好，下一个问题是说这个IOUN的问题，这个这块儿想着一个图，这个图好像是L优人的那个作者，在第一个那个邮件列表里面，亲手画的一个图去描述说他们这个东西是怎么工作的，基本上就是你往SQ里面塞一些任务，
然后内盒去执行，执行完成之后塞到facebook里面，然后你就可以放security上爬了。
但是呢，他有一个很大的问题，就是他是因为瑞典它是一个循环念表，然后大小说固定的它存在一种什么样的情况呢？
就是可能你之前比如说你把sq塞满了，然后你扫描一份，然后再再再杀你的，再再再杀你。
然后那盒执行完了这些任务之后呢，就开始1.1点的往cpu的上三，然后他会把CPA塞满了，然后这个时候你还不断地有请求过来，你还想往这边骑脚，然后你不管怎么骑脚，然后那时候都会跟你报，说CQ满了，你
怎么还不拿？
在这种情况下，他就这这个family就有可能失败。
然后这个东西和什么东和什么事情这些关联呢？它实际上和取消直接关联，就是我的取消任务能不能正确提交这件事情有可能比，如说你cpu塞码了。
所以说，我想要把一个任务取消，我需要先解决其他的任务完成了的情况。
我们把这些结果都存下来之后，我再去取消这个东西，或者说他的那个设计上非常的麻烦。
然后另外就是它的这个api，目前来说感觉它还不是搞得特别好，就是比如说有一些iouring的feature是那盒儿在编译的时候已经敲定的就是你不可以手动的调，你只可能通过某些api获得说
这个这个，那盒儿支不支持这个东西。
比如说内盒到底是在CQ满的时候，是会把剩下的东西直接扔掉，还是会等你等你把CQ挪出去之后再给你往里面塞。
这件事情是你没有办法控制的，有些内盒就是这样的，有些内盒就是那样，然后还有比如说就是SQS， t e或者cpue，这个各有两种大小，所以说IO usually实际上最多可能有四种情况，然后这些这些多出来的这
个大小到底那回是支持还是不支持这件事情，你没有特别明确的api去判断，你最多就是只能通过判断这个内存版本。
然后另外还有一件事就是rax上对于这个东西的封装是那个在做topic uring那个项目的。
但是呢， copy uring的项目的主推说，我这一年都在忙其他的事儿，所以完全摆了。
所以这个封装它目前也是很久没有更新了，几个月更新一回大改，而这个问题不大问题不是那么的大，除非他们哪天把except for搞上去。
然后另外一件事情是positive ao，然后这件事情也是一个特别好玩的事情，就是AMO就是an old policy。
它有一个标准， i i know i really say alo不符合这个标准，他们独立做了一套东西，然后j lab ce也有一个l，但是他们是用线程池实现的。
然后另类内盒的那个东西他们是这样的，他只支持你不加buffer打开的文件就是他们的意思，是，我们就是linux二点几的时候大概的意思是我们给你提供一套义务的，你们不说都想要异步吗？
给你们提供一套义务的，那你们就完全处理其他的问题。
比如说巴基斯坦。
就是你们自己去处理buffer。那时候不管所以这套东西就一直没有人用，或者说一直就是很少有人用。
然后这lab c呢？为了符合policy，他搞了一个，但这套用的是现成池，所以实际上性能并不是很高，所以也没有什么人用。
然后众多的podcast实现中，谁都谁的最好用的实际上是free b s d的那个东西最好用就是ao。
如果你去看他podix标准的话，他异步通知的方式要么是开一个新的线程。
跑，你预定的一个函数，要么是通过siteno的方式发给你原来的这个线程，但是众所周知， signal这个东西在现代的编程中完全就没有什么办法用对吧，你在C个楼里面你能干什么？
你能调用一些，有限的函数，然后你你贷款想调用一些，比如说你想调用个这个锁，你想这样一个matex，你是没有办法在新楼看到门门搞的。
然后， fb， s， d的这个东西呢？它新增了一个扩展，说它可以说我在完成了之后，把一把这个消息发到qq上，这个东西就很好。
但是呢，我在虚拟机上搞了稿，然后发现它相比偷Q的那个性能提升最多只有八倍，所以不到一个数量级。
具体的可以去看看这个pr，然后目前我们是不是特别打算合并的，因为感觉其中不是很多另外一个bonus是可不可能现在dix有IO uuring了，然后有个人跳出来说我们来重写这linux，我们把里
面的aio变成用iuluring实现，然后这这件事是不知道我觉得是不太行，就是如果你去读一读posix，那个标准就是你不太可能完全无开销的对接。
然后最后到最后了，我来稍微重结一下，这次都说了一些什么吧。
首先呢，就是如果你想对于一个iome d型的程序去提升它的性能，你当然最好的选择是搞异步，你不管搞什么样的异步运行，就实际上出于就是出于严谨的考虑。
Combine呢？它本身还是一个实验性质的软体，然后呢，它的版本号也没有到1.0所以如果大家实在的想上生产环境，不如还是先试一试。
QQ对吧， api也比较友好，对，但是这个东西主要是我们的这个探索，然后我们也在其中讨论了大量，比如说rack的设计可能可以改进的空间还有包括这个操作系统，也许有一些可能改进的空间到比如说这个像LCP
这种20年前的api设计当然是非常的乱，然后iou呢？
其实他们也基本上是考虑了say report，然后你像他们高的系统慢慢中搞了一个什么send的zc这个东西是想zero copy的sen这是linux上本身的那个send的一个扩展然后这个
东西，其实就是你在russ上可能几乎完全不是特别的能用。
就是他的那个东西是这个样子，就是他是说你发了个肾的，然后那盒拿了你这个buffer的这个根。
但是呢，你不能。这个就是你完成这个操作之后，你不能把这个八分释放掉，因为之后那会儿还可能会用到它。
那那盒什么时候会用到他呢？其实你不知道。
就是对complete之后也有可能会用到它，因为S的这个操作complete了不意味著系统的这个被发送到远程。
他保留着你这个指针，直到把整个巴基斯坦发送到远程，你才可以把你这个内存给释放掉。
因为这是zero copy嘛，你看是不是完全的zero copy啊？
所以你猫那个时候不要服役了。大okay，呵，其实不能持续发生的吧。
就是如果你想要管成的，就是具体要什么时候释放，我还真的没有找到，就是我在文档里面没有找到到底该怎么搞，但是它也许有一些方法能知道到底是什么时候可以释放。
比如说可能是比如说他如果发生了一次flash，然后他就会给你通过某些方法发送一个信号，然后让你知道已经flash的前面这些buffer可以删了他也许有这样的方法，另外一点就是这个在一个叫做
的talegram群里面，然后在亲友之前一直在呼吁说，我们什么时候能有一个能用上LU人的topic大家都会说那topic现在这套api设计是不行的，你如果想要lour，你就得设计一套新的
api，所以大家都在期待hope2.0，然后后来大家当然也有说Q头的那个，等到combie出来之后，大家就再也不会说这个偷Q2.0了，然后现在大家每周都要讨论的问题是， i think channel
还有到底哪个好？
然后最后就是感谢这个项目的各位贡献者吧。然后本来我想在这块放张图，但是我后来没有找到到底怎么样把那些那个那叫什么contributor的那个头像二分一个一个圆的圈儿，然后放在这块儿，好像是
好像是需要开通什么赞助才能搞这个，我也没有搞不好意思，尤其是我们这个第二位的们。
Tander，然后他在他在一些地方做过。在各个地方的那个网名不太同意，他主要在这里面贡献了那个poling drever就是基于epol和QQ的那一套东西是fall back用的然后在
linux上的future driver这个东西就是如果在列宁口号发现IOU room不太行，有follback到了一步，我们是有这样一套机制的，还设计了大量的这个比如说类似computer
io这类的trace，然后另外还承担了大量的code review工作，也是非常感激他所以要在这里面读这个特定的说一声，然后这就是我对于这个项目，然后还有rug进步的一些使用的分享，不知道大家有没有
什么评论或者是问题。
往后讲了好长时间了，等了一个小时了哟。
群里有什么问题吗？
挂了吗？有人法，但好啊，生活老发过了。
我们就只有人，我超远了，我搞。
啊对，我就是因为这个我才要用windows的怎么了？
有些不是因为这个，不只是因为这个。
我其实还是一直都比较喜欢那种跨平台开发的，然后你想要跨平台开发，你就必须得在windows上实际跑一跑，然后你也得一时你也得在卖个上世纪跑一跑，所以你看我今天带了一三mac。
对吧？这个很有说服力，那至于你们为什么没有linux的机器？那因为我已经有wr了。
好喔。
你只用一个bit，你考虑到对齐的话，它还是得至少占一个字节，然后如果你考虑到后面还有别的东西，你可能没办法，大家对对其实说起来我现在是用了两个布置，你说的对它是可以变成一。
不是你把他压了之后，如果你再考虑到他，实际上对其还很大，实际上你一个两个没有什么区别。
你把所有的一些包括都给加了。
啊对，然后呢？然后它占用的字结束，还是把。
对啊，就是说把所有的。
Okay，你现在不是说我觉得是谁有需求，谁该做？
是谁有需求谁来做？实际上我现在已经很用化了，你明白吗？
就是就是实际上整个这一块我只分配了一份，那份就是你知道那个rax中有一种类型叫d st，就是动态动态大小的类型，然后实际上就是这个东西，它排布就基本上是引用技术，然后一些需要的信息，然后就直接拍
了这个op就是那个operation的那个结构，然后整片这是一块儿一块儿只需要分配一块儿内存。
对对对，然后，然后外面再套一个box，然后如果是windows上的话是这个样子，就是locp的那个你们不知道你们看没看过它的那个api就是lcp的那些请求在发送的时候你一定要给一个
overlap的结构体的指称。
然后他们内部是用这些指针作为key来操作的。
所以这就意味着你几乎就是在我们的，在我们的aras语言上没有解决这个问题之前，你几乎对于每一个操作一定要分配一份内存，然后拿一个指针，然后在windows上的处理。
其实这样的就是前面是overlap的东西，然后是引用技术，然后是其他，然后最后是数据，然后整个这个东西是一个大的box就是内存分配已经降到最低了，只分配一块，就是分配一个只分配一个。
那，但是还是还是能有一个。
No， io也有分配。
不是套话。我，这个实在想不通，我们两个的ava记录也是差不多的，就是只要是
Hope you really。然后被提个那个api都是几乎是完全一样的，就是都是必须把buffer传进去的。
Global是不需要的。 Bloomie，它接收那个可编引用是因为它的file自己带了个buffer。
就是如果他还要自己带一个buffer，你在对他做io的时候，你就可以接受引用和可编引用，因为你把一段内存复制到另一段内存。这件事情是同步的。
网友，他那个东西是对本地人做了策划的，他有好多不同的复杂的设置，操作和类型，这个东西我还真没有完全高。
懂，但总是他是对那个东西特化的。
还有另外还有一点是我还是我还是没想起来那个就是还有一个号称自己怕平台，然后又支持的那个，然后他们那个api设计就是就是也是接收客编引用该ct一样，当然我仔细看了一下他的那个实现就真的直接，就把那
个buffer的纸质扔给了lorrowing，就是他那套东西是非常容易做出来on sound的东西。
然后最后我们也没给他们开衣服啊你说应该给他们开一个了。
对对对。按理说我应该去跟他们说你们这个东西on sound。
但是我我后来想了想，我作为computer的这个不太合适，你知道吗？
就特别像在开源界打商寨一样。美国方面，创建不管，就就就创建一堆马甲，然后一块儿去布置他是吧。
然后许多他的信任，然后拿到他的。然后然后趁他某一次戒网瘾的时候，我就上去射了他所有的仓库。
你把它弄出来，还给他发一把就说，
啊报头来了。
他会说。
这都是谁啊？又看上去了二号，要不要来说一句话？
画。
要求解剖我，说我哇，好好说了个话，哈哈哈哈哈哈。
我之前都没有看到这个东西。刚刚标题提醒我的。
那个作作作为主要的contributor还有manager，有没有什么感想吗？
Bye.
没有对对。
只是想到还有一对象，你看，略有残酷。六，有惭愧。
你已经很努力了，就是我经常有一些乱七八糟的想法，然后总会发皮啊。
然后我放完pr就会把reviewer设成他哈哈哈哈。
所以所以说你会看到现在那些PR reviewer全都是一个人。
这个东西也欢迎大家都来看一看吧，批评意见啊什么的。
来点人做贡献吧。
我说，来一点人做贡献吧。
我说，对啊，非常希望多来一点人，要不然你看你看pork都已经因为省pr太多都已经累了啊第二是方便，你要把最后结束，要把。
这取决于你数据是什么。你要是个vactor就没有搞对。
但是如果。
如果你是个array，都会有，都会有copy。
那对我。
你存进来跟个pin也不行啊。
那你把这个feature for get掉，然后。但是他还是属于既定的东西的owner。
还是把那个东西的owner谁给我了？那么还是有copy吗？
性的道路。
你只要是个array传owner shape，所以一定要copy的蛋它是做你的。
我们就是其实就是因为在站上的东西想要穿ownership就一定要。
喂你是不是放在一个buffet然后喜欢哪怕好吗啊对对，是这样的，就是你像在iouring上有一个叫做register buffer的东西就是你把你你比如说MIM map 1 段内存空间，然后你把指针传
给内核，然后那然后这个时候你发的任何io请求你都可以跟内核说你帮我选一段，选一段内存空间。
但是问题是只有iouring的那盒有这个东西，就是其他的操作系统，一步都没有。
然后我说这个东西确实是可以用软件实现的，但是谁来做呢？
是吧，就是我说我可以review，但是我是实在是没有精力做这件事情。
而之前有一个有一个叫holo老师后，老师打算搞一个东西，但是他那个，他只在LU人上搞了，然后他说别的东西我都不想管，会。
后来我们就直接把那个pr给close，非常的悲伤。
我可以按照小猴的头让他写。
我可以线下搏击。
谢谢小伙子太恐怖了。
老师，我相信他的力量是足够强的。我们，我们从前线下一起review过propo老师身材苦于五。
力量和耐性，也基金四座。
所以的话，其实就是还有还有，如果真的有人感兴趣，也可以过来看看别的，比如说那个secret就是happer这个东西实在是太太糟了，就是想把那个想把一个机遇完成的一步搞上适配上去本身就很麻烦。
然后试飞上去之后，我到目前为止还只可以成功的让h gdp 1 跑起来，那个hr就会卡死。
卡斯的原因，目前还没有找到，就是不知道是因为他对tokyo做了过你河还是我在哪里适配写的，有什么不对，但总之他就是会卡死。
要不然有一个好像是还在测试过程中，但是有一个你像那个request也开始支持三了，但也是unstable feature。
啊computer肯定没有啊这不是正打算搞一个那个OSDP coll啊对，这个今年no spp这个我我要做mentor，然后搞一个项目是说在基于computer搞一个那个quick toic就是
这个大家都知道吧，就是HD 3 的那个技术，他们不再用tcp了，他们改用UDP的那个qq，然后这一套东西如果你能在computer里面做出来的话，大家将是第二个异步的第一个是基于topic做出来
的。
黑客可能主要的挑战是做combition base的，这个东西本身也很有挑战，然后可能就是这个要对pick有足够多的了解，其实我了解。
什么？
那个是不可能的，那个不太现实。
我们最后是希望说能够把那个qq给封装成跟什么tcp string或者UDP stream差不多的东西，不过他有可能不再是对他有可能不干，涉他不再是那一套样子了，他可能是什么
connection，然后server。
奎克的抽象程度要比那两个都要高，没有办法简单的做成这种东西。
喔好报告。
更复杂。
应该还是可以有个security的吧，没有定什么事情。
不是我，我的希望是比如说你可以把它最后你在上面加一些复杂的report，而你最后可能就是你用你用这套东西发stev请求就像你用tap speement发HTPE信图一样简单。
管理他现在，现在多少对某一方，它的。这还有些小组。
都是可以到处留存，我先做多少，我发通话跟我去接待，还是说就是他有很多很多最优化的，你讲的比如说如果说我没有没有发现你在这边说我我就说我有fuffer的然后最后影响，因为你就是两边的包含百分
之，然后这个。
如果要是数就是不是不是那么的优化是吧？好吧。
行，那就看具体怎么实现了，把它下来，这就可以打个广告。
你，你，你，我们还没截止呢。什么？什么时候正式发出来那个通知，我还是加油。
另外就是这个vio。这件事情也挺有意思，的，就是一开始我其实只是把它当成一个愚人节玩笑，而这个东西发到那个rap的群里面之后，真的有人想要真的有人想用，甚至在催我开赞助。
所以这个东西也可以有人来看一看。
开了，开了都在computer s那个okay station下面。
这个东西其实它封装的还很原始，尤其是在jtk上还有一系列的bug，就是jtk，那个东西其实很不好搞。
还有那个就是duy的另外一些问题，那也那是另一套时尚，就是大家会发现各种历史悠久的东西都全是时尚。
然后康熙，我不是希望他以后也不是。
那个是吧？你看，随时你看，偷气已经变成死伤了，谁知道。
有啊，明天就明天就okay。
只要我要看我们的足够快，他就不会或者不会变成时尚是吧？
现在，现在应该还不是时尚吧，其实就是为了写的方便里面有大量当safe，当初我也闹过很多笑话，就是比如说什么为了绕过russ的sen的，要求写一个send rapper，然后直接无条件的on safe in
person.
然后后来被对对，对对对，我对。然后就被其他的manager持续的批评。
后来成为了一个被他们笑话了很长时间的事情，就是正确的那个sender report的写法。
其实应该是存一个你创建的当前线程的thread id，然后你每次获取他的时候，他都会检查一下和当前的FID是不是同一个。
如果不是当前现成，他就直接拍你，然后这种情况下这个东西这个report他就一定是安全的。
因为你就不能把它分得到，别的线程，你要是伸得到了别的线程，它就直接pennic。
然后这样的三，自perfect在什么地方用呢？在是配heter的时候用到了就是hyper，他会要求他的那些东西都得分的，但是我们的community是个单线城的软态，所以我们所有的东西都不慎
的，为什么迟早得改成多天少？
会跑很长辈，因为你的计算逻辑现在你的爱国主要在对吧？
在内部里头。对，那你开出来的时候计算，那你可以stun block真的搞。
呵这件事情效果，你就考虑着回来了。进行一些纳税。
啊然后呢，三个多小时。
那你说的多，现场能怎么样解决这个问题呢？你可以说至少在投诉。
对，你说的对。当然iouring是单线上的。
首都说work stelling的话。
就是windows这个条款。
其实其实是可以做多现成的，就是它本身没有阻止你去用多现成，只不我因为我自己没有测试过，但是我之前查到的，说是如果你already配合多线程的话，那个同步的开销会比较大，反而会把艾未未本身的那个性
能优势给抵消掉，但这个是我，是我从网上看来的，我没有自己做过bentral的。
其实其实我也不太可以，因为我也没有试过，就是就是理论上来说，确实就是你比如说就是你看那个哪。
张图非常错，就是就是一个iour user，其实可以拆成三部分，就是你，比如说你可以说SQ和cpu无论如何你想要多线程，你都可以，你都可以过多线程，但是你要同步你，你有同步开销，然后save meter这套
东西是完全可以做现成的。
工作的是多个多个县城，都可以都可以做summer need okay，不是不是就是共用一个rain的情况下多个县城都可以同时的submit，但是SQ和c q当然只能一个当然，只有一个线程可以控制编
辑。
对，但是这样到底好不好我也不知道。
然后work studing他也比单线城的要复杂一些，所以我就没做过。
我们，如果哪一部？是啊对对对对对，对，那那一套东西确实是cpu的，他的整个设计都是网站。
会。
对，如果你要是一会儿我放，一会儿计算棒的，然后你这两块还必须是线性的话。
你这个东西就它这它就比较复杂，是是。然后你像比如说xix，他就会搞那种，说每一个client我都给你重新开一个软体，你去搞。
然后其实所以说computer目前来说也推荐用这种处理方式。
就是我们有一个我们，我们的那个包里面会有一个简单的dispatch，而且他只能干一件事，就是他同时管理着多个run time，然后你想提交一个任务，他就随即给你发到一个这个空闲的runtime
吧，但是他不能。 Work studio。
三一条防疫旅游这个小麦的对啊，是但目前来说也没有完全选择是cd的。
用了一个channel channel下哪个就是哪个。
但是如果你如果你任务很多的话，他当然每个都能选到的不是这样，这样就很好。
好，您来pr不应该那种。然后就发，那如果没有的话，你来做一些啊来来来来来来，你给你gpr。
就就就就是其实就是抛砖引玉的，思想嘛，先做一个差不多的，然后这个时候就会有人说你这块可以优化，然后我们就可以顺便把它骗过来。
不是骗，不是骗，是邀请。
对
就是那个dispatch，当然它目前只做了最基础的优化，就是你知道有些任务是无论如何都得扔接线程处理过的。
如果一个run time就开一个限程式，就显得很浪费，所以他dispather做了一个优化，是让他所管理的，所有runtim共用一个线程，值。
其实我也不知道那个线程池的做法好不好。是你知道，比如说你如果考虑到一些网络驱动器上创建而创建啊，删除文件啊什么的，你如果没有原声的异步的东西，你就必须得用先程式来做，它才是异步。
但是你要真的把这个任务swim到现成史上，他到底性能上有多少损耗是没有做过bunch mark，然后你像iou really到时候还好。
它几乎所有的东西，他那个cisco做得比较全，但是你比如说像windows上或者在或其他的操作系统上，他基本上就都是spong block用到线上吃上就是也很难说它到底性能会有多好。
在奔驰mark的时候，我们就只奔出mark那个读和写那些都是一步的，就没有奔驰mark创建文件都很少。
But那这样的话，你那你的写的代码完全不polable啊。
我不知道。
而目前来说，它还是几乎是完全polable的。
就是哪怕是unix society，我都给windows搞了一套，因为那个windows大概是哪个版本之后新增了有限的unix dockey的支持，那个东西一开始打算和WSRE做互通，但是众所周知，后来
当WSR 1 又被放弃了，然后wsl 2 也没有办法和windows的unix做互联，然后这个东西就处于一个半一半的能用的状态。
把，反正也加上了，然后每次群里有人问说这个做P信都可以干什么？
然后就会有人说，那你用unixtorman society啊。
然后这个时候他就说了，那这个东西在windows上怎么办呢？
然后就会说在note上也可以我用那个socket。那么windows上用什么用next socket的，然后他就会找一圈儿，然后发现之后computer在windows。
对，然后你送的时候就会发现那个支持非常的扭曲，就他支持by pass，他不支持upstructure。
所以你没有办法登windows上用它做出来一个society tire。
对你必须得有一个文件，然后你又知道它那个address，那个大小是有限的，就是那个路径长度最多只能是108个字，符。
对。
就是就是你没有办法搞非常长的路径，然后他根本没有提供任何的方法让你搞一个功能。
先生，大家还有什么问题吗？
大家还在说spon的事儿，其实我一开始说spong那块，我还是说到pip了， at上面是另外一个问题，就是你们知道不是像FD这种东西，你不code你不cover他他都永远会占着，但是PID这个东西，如果
你wait过了它，他就有可能会被重用。
对吧？所以说，当你是的一个进程，然后他返回了一个pip，然后你又去你，你第一次wait他的时候肯定不会有问题，但是你第二次为他的时候，你等的还是不是他本身？
这是一个值得商榷的问题。
然后是你像那个是russ在linux上他说的那个man的命令就是他可能会去用project加exactly搞，然后他的那个pid的获取就非常的扭曲。
其实不止是pad就是这个样子的。 Linux有一个东西叫pitfd，它是可以根据PID拿到一个包descripture，然后你可以通过pull这个fell descript来等待这个进程是否结
束。
但是这个时候就有一个问题，就是如果你直接spon，然后拿到了一个下一然后这个时候有一个signal发过来，然后这个signal emerge的这个pid，然后这个signal handler结束了，然后这个
时候，你再用这个pid所创建的那个FD到底指指向的是不是你spon的那个进程。
这件事情是不确定的。
所以它的那个你知道rax怎么样创建出来pip f 1 嘛，它用了一个非常扭曲的方式，它先他先folk，然后之后他不就有一个子进城，然后那个子进程就可以通过get get id， get pid来拿到这个进程的
pid对，然后你会发现说既然这个紫禁城在运行，那么这个p id一定是有效的。
喂不是，是他在exec之前根据这个pid创建了一个ip，然后用一个society的pare发回了他的附近城。
然后他在exec，那他如果一定要去录飞，之后我是，但是这个时候FD只要不关它就一直有效。
对，但是这个就非常的扭曲。
就是他们，就是他们。一开始其实不是这么干的，他们就是他们一开始的时候是fork force之后那个附近成不就是被拿掉拿到资金上的pip嘛？
然后他拿到了之后他就直接pid std。就打开一个FD，然后这个时候就有人指数说，如果这个时候中间插入了一个signal handler已经把它wait过了，你这个时候拿到FD就指向了，可能不是那个
进程，所以他们只好做了特别扭曲的更改最后用了一个tocket pare想办法把这个sd传回去。
对是重用的问题，因为
办理。
那不一样，还得有一个society pare吗？
对对这个东西非常复杂，然后然后就是因为这个重用问题。
然后我就突然想到了一个特别好玩的事儿，就是就是其实在很久就是在很久很长一段时间以来， combie的那个代码始终有这样一个bug，就是去看这样一件事儿，就是这个数据库里面成功地把数据的生存器保证不会服役掉
了，就是只要这个东西没有完成，数据就一直有效，但是在很长一段时间以来，这个程序一直忘了这样一件事儿，就是sd是有可能被close的。
这个办法，这就是就是你这里面的这个ifd。可能是可能啊，失效了，但是这个操作还没有被执行。
就是它被Q到内河里了，但是很有可能在那河执行它之前，这个F 1 就被close了。
然后另外一个文件又被创建了。
然后整个这个异步操作就操作到了错误的文件上。
怎么办？
所以说这可能唯一的解决办法是我们引入一个东西叫做share的fd，然后它实际上是一个RC或者arc包了。
一个F 1。
对，就是直到他被释放，这个fb才有可能被扣。
然后好像mono io做的这件事情。
比如说你拿了对，然后，然后都是在什么也没有被告，因为我们说的情况下，为什么他可能被。
当然本厂唯一本厂唯一的mvp就是你知道吗？就这个forget。
就是当你问这些问题的时候，你首先想这个东西他会不会被program？
要做，他对有的话好说，你必须得大楼，如果不做，问题就是。
好棒，你破一下也可以forget就是后你再ok，你用这个话就是80张内核。
没错对啊，那你就得把整个call做成密布的。然后呢？
这个啊，这个时候呢，内部还不知道，然后你要爱里面把对。
对吧？总总可能有这样的情况，因为我们为了确保性能，我们肯定不能你创建一个就是一个。
但是你也可以这么干，但是你这么干，你就能确保那会儿一定正确的读。
读到了对的fd吧。但是。
你也不能保证那盒就一定拿到了正确的S 1 啊。
那除非就除非io u人，他说保证说这个东西只要你被扔进内核，那么这个SD上面的引用技术就会直接加一，除非他那会儿保证了这件事情。
但是即使那时候保证了这件事情，这个问题还是无解的，就是你如果不考虑io， u人，你考虑一些需要你考虑一些需要到县城史上去做的。
比如说除了louring之外，其他的平台上，像l cp也好，然后像就是mac上用qq也好，主持你要。
什么？什么是最典型的例子呢？比如说在麦克上，你要想要读一个文件或者写一个文件，你只能去开一个线程池，然后你开了这个线程池之后就啊，就是你，你把它swn到这个线程上之后，然后这个县城在执行这个函数之前，
你拖拖了，把fb换掉了。
好吧，然后当时我们讨论说有有没有什么这个别的解决办法呢？
比如说我们可以尝试说在你spon这个函数死亡，这个函数到现成之前呢，你把它double dup 1 下。
Support.
对就是大部分这件事本身很贵，而且众所周知， linux上默认只能有1024个fd。
对，然后。但是这件事情它毕竟是一个，就是大部分本身是可能出错的。
对，所以说这件事还是很难搞，就是目前来说可能最通用的办法还是把它搞成一个引用技术了。
就我们额外给它加一个引用技术，然后你就会发现你为了一个四个字节小的fd或者八个字节大的，这个file handle，你还要给他专门套一个智能指针，然后如果你想要让这些东西能够发送到别的县城，它必须得是一个
arc.
因为一个文件可以就是就是你知道这个read is就是我一开始举的这个例子。
Redit就是reddit，这个东西接收的是share的reference，其实就是一个文件，可以同时从多个opposite开始起读。
对于操作系统来说是没有问题的，因此你不能退口。那shift因为我们一个优化的方案就是从多个点开始，同时读这个文件。
优化，这个优化的。对啊。
我讲234。
啊，你帮我，我都是看起，不是我们大家都能够撞掉。
用啊outdoor man。
Kid什么？那气质的啊，好白酒。
然后。
对这件事情我确实想过这件事情是可以做的，就是windows上也是可以做的。
我想想后来为什么没有什么。
啊，好像没有为什么就是这个确实是一个可选项，但是没有这么做对对对对对，就是用就是用一个阿克套起来那个pr其实已经写完了，但是因为它更改了太多文件，所以pop老师一直不愿意，没有，没有我其实能
理解就是我的pr都是这个德行，就是一改就是改十好几个文件，这个设计你看起来它是有许多个create，它组成的，但你会发现你改一个地方好像是要改很多，我的结果盒可能做的还不是特别好。
不是那卖回这件事你来给我拖呀。
那你猜一下吧。
就是那个东西他没法拆，就是你如果要把这个东西都改成二合的话，那你肯定是几个create都要改呀，你fs要不要改？
那要不要改？
我曾经是这样的，但是炮老师还是强烈建议，不要这样，那个尊重我们，天呐，要不然我要是都一言堂他们都跑了，我就只剩我一个了。
我，我就我就只有那种特别小的或者特别紧急的那种，我才会直接就上去。
那确实存在过一个特别剪辑的那个。特别好玩的是这个原因。
就是LC， p上就是就是无法取观这个问题然后你就会发现，说在一个线程上发的这个io可能在另一个线程上接收到了这件事情，当时做了一个什么操作呢？
就是说我直接在这个，在这个operation里面纯一下。
我当前发送的这个LCP的寒冷。然后如果被错误的这个lcp接收到呢？
他就去看对比说，这是不是应该发给我的？如果他不是应该发给我的，我就把它发到正确的上面去，因为你想他是channel吧，他总可以发发过去，但是当时我做了一个非常脑残的事情，是我发过去之后忘了忽略它
了。然后他在自己所在的县城上又把他处理了一遍。
然后就是就是请求数量比较多的时候，你明白吧，就是那些情，就是那些。
二，然后内存，然后类型什么的就全都炸了。
你好，比如说县城一和县城二，他们两个上班各有一个lcp，然后线程一上面县城一上面发了个请求，但是县城二接收到了现场接收到了，然后他的号是零，但是本身县城二，并不知道有这个存在，然后他自己也发了一个，请
求编号也是零，然后结果现成一的这个零先到了，然后类型，如果还不一样的话，整个类型安全就劝炸了。
然后剪辑修复了一下。
就我还请自豪的那套东西就是如果on safe的写的没有问题的话，那他是safe的，哈哈哈哈哈哈哈哈对，这这是一句废话，就用类基本上是用范形还有类型的东西去确保了，说你往那盒里面发了一个io
的这个task，然后他会给你返回来一个key，然后在类型系统的设计上面给你确保了，说就是返回返回过来的这个T和buffer的类型始终是对应的，这样你用这个key再去从那盒要八块的时候就一定
能够正确的做类型转换，因为你类型擦除总有一天你还要反过来说你还要把类型重建出来，那么这个类型的信息，它直接保存它的这个唤醒类型的信息，具体的话可以去看一看代码。
一开始那一套东西，其实它是on safe的，我就是白烂，就是这些了。
Sip然后因为那个，因为那个东欧的大哥总跟我说说就是你完全可以改成接收这个普通的，这个可变的引用的嘛。
然后反正你的，你的这些也都伤safe的。你再来点儿啊， safe有什么关系呢？
然后我一气之下就把他们都标了safe，并且把每一个并且把每一个可能出现当然safe都ok，就是公开的on safe都给删了。
这大哥就特别的生气，他说，你这样就引入了额外的offer head。我不要。
然后他就park走了。对，要不跟我们说了。
所以说这也是我们在设计上的一个考就是虽然会有over head，但是尽量还是暴露。
暴露正确的都安全的接口。就如果你暴露一个不安全的接口，实际上是很难把它写安全的，就是你你很难的去正确的用它。
我暴露了一个接口。然后我说，随便来一个buffer reference的，我都可以接受你在外面是几乎不可能，你几乎不可能把这个代码写出去的，除非你在这个drever上面再包一层，然后存起来，这个
puffer，要不然你不可能写正确，你不管把这个把手放哪，你都会存在froget然后罚款被抓。
就是你把它封装起来也没有用。
对，就是你把你把那个buffer放在future，然后再包装起来，一重也没有用。
如果直接job的话，它都会出问题。
我们就结束。
有没有？还要说两个句吗？还是好好不用谢。
这个不干方然后还是见多吃过。你要是能来搞点儿pr都更好，先把我，我们是把还打得很好。
我来，你打我的，这个晚上我不到现在吗？
谢谢，谢谢大家愿意来听。