V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  lesismal  ›  全部回复第 11 页 / 共 60 页
回复总数  1200
1 ... 7  8  9  10  11  12  13  14  15  16 ... 60  
258 天前
回复了 yueyuea 创建的主题 问与答 兄弟们你们怎么看程序员信风水这件事
很多人年轻的时候都觉得“我命由我不由天”,上年纪了终于懂得“苍天饶过谁”,所以才有四十而不惑,五十而知天命。。。
258 天前
回复了 yueyuea 创建的主题 问与答 兄弟们你们怎么看程序员信风水这件事
从科学的角度讲:
风水改变人的心态,心态变了处事方式就变了
能信的人,至少态度变得柔和了,懂得心存敬畏了,懂得和气生财了
所以就跟心理医生类似

从有神无神的角度讲:
顶尖科学家穷其一生最后基本都是有神论论吧,受过几年无神论教育就自信没有封建迷信了?
259 天前
回复了 HOMO114514 创建的主题 NAS 一张图展示绿联 NAS 现状
哦哦有了,之前图没刷出来只看到了文字。。
259 天前
回复了 HOMO114514 创建的主题 NAS 一张图展示绿联 NAS 现状
文不对题,我是进来看一张图的,图呢?
百度 AI ,欢乐开怀!
众里寻她千百度,请到红包领取处
@shanwu 国外非 IT 研发的不少普通工作在用 8g ,而且有不少是 5 年以上的老设备,中介、医生、会计、普通家用等等。
而且这些普通用户甚至都不关心性能、配置这些,因为他们的普通需求,确实随便够用了,不只是内存只有 8G ,甚至硬盘 128 、256 对他们很多人都够用、512G 硬盘对他们来说都是很大的空间(回想下十几年前,那时候 500 硬盘也确实算是很大了)。如果果子基础配置更高,意味着打击这部分群体的积极性。

所以如果不考虑价格因素,只聊 8G 够不够用,那苹果起步 8G 完全没问题。但可惜的是,这部分普通用户,基本没人来讨论果子配置够不够用的话题。

对苹果 8G 不够用的这种主流评价,也是类似幸存者偏差效应,因为跑到网上来这么评价的,比如 V 站主力用户、测评 UP 主们,都是属于你讲的“懂行的用户”,包括我自己,我日常 25G 起步,稍微开点东西就 30G 了。

如果考虑价格因素,果子是真贵、真黑心,我也抵制。但 8G 对于普通用户确实够用
骂苹果 8g 的多数是 it 互联网研发人员
但其实,苹果这 8g 主要是给广大非 it 互联网研发人员准备的
所以吵没用,爱用不用,要么忍要么滚一个道理
> 原来你的思路和我的不一样,设置一个堆 Heap ,每 5s 超时,取出堆顶最后的 fd ,进行 closed 吧。这种设计只有一个 timer_fd 。

用堆就不是固定 5s 超时了,而是根据堆顶的超时时间设置超时时间。
也不是只取出堆顶,因为代码可能导致延迟误差,所以是需要循环查看堆顶是否超时、超时就 close ,没超时则更新当前堆顶的超时时间为触发器的超时时间


> 而我的是每一个 accept 后,就创建一个 timer_fd 。然后被挤爆了。

这种是最浪费的方式之一,没必要拿来对比,应该用来改进


> 堆的删除只能在对顶进行,fd 接收数据后必须删除这个堆中的数据,但是没法删除堆中。

堆可以删除任意元素,up 、down fix 位置就可以

红黑树也可以用来做这个,但这个场景堆比红黑树要好
264 天前
回复了 drymonfidelia 创建的主题 English 网站前台和后台用英文怎么表示?
front desk 是指 front desk girl 吧?
合着我说的你根本就没好好看,或者看不懂:

> 我要接的不是 bind 和 listening 的一个 listen fd 连接,而是 accept(listen_fd)出来的几十万个 client_fd 连接。我也无法区分。

switch(fd) {
case listenerfd:
handle_accept()
case timerfd:
handler_timer()
default: // 除去 listener 和 timerfd 就是已经 accept 了的 socket
handle_socket()
}

再不济,你在 event 里那个 void*存储这个 fd 对应的结构体指针、或者只存一个 fd type 也是可以的

> 另外:试了在每个 socket_fd 同时绑定一个 timer_fd ,文件描述符会膨胀 2 两倍。普通使用没有感觉,但是高并发测试下性能急剧下降。

不需要每个 fd 一个 timer_fd ,一个 eventloop 只需要一个 timer_fd ,具体的你看我上一楼的回复吧


我认认真真给 OP 写了一大段,OP 连看都不好好看就来随便回复,如果这次还不看,那请 OP 不要回复我了
@lesismal #19

=》除非你对精确度要求非常低、时间轮间隔很小这种,否则真没必要用时间轮:一是不精确,越想要精确则间隔越小越可能空跑,二是小堆做优先级队列定时器这种性能已经足够强、基本是行业认可的最佳实践

虽然秒级 =》虽然毫秒级
265 天前
回复了 csfreshman 创建的主题 C++ 如何从 c++菜鸟转型 c++高手
有学 cpp 这功夫,早把 rust 玩 6 了,如果懒得学 rust ,go 可是太容易上手了。

https://m.thepaper.cn/newsDetail_forward_26518590

直接贴一部分吧:

其实,这并不是美国官方机构第一次呼吁放弃使用 C 和 C++ 了。
去年 12 月,美国网络安全和基础设施局( CISA )联合其他机构颁发了一份《内存安全路线图指南》, 其中就指出了 C 和 C++ 是内存不安全的编程语言,并呼吁软件开发商采用 Rust 、Java 等其他内存安全的编程语言。
2022 年 11 月,美国国家安全局 (NSA) 发布了一份网络安全信息表,详细介绍了它认为内存安全的编程语言
Rust
Go
C#
Java
Swift
JavaScript
Ruby
Python
Delphi/Object Pascal
Ada
定时器的实现主要有两个点:
1. 管理定时器的数据结构
如果你用 c++ ,priority_queue 维护每个 fd 的超时时间:
https://en.cppreference.com/w/cpp/container/priority_queue
如果用 c ,找个或者自己实现个小堆也可以
除非你对精确度要求非常低、时间轮间隔很小这种,否则真没必要:一是不精确,越想要精确则间隔越小越可能空跑,二是小堆做优先级队列基本是行业认可的最佳时间

2. 定时器的触发器,简单点可以用 epoll_wait ,虽然秒级精确度但对于 read deadline 足够了,如果想更精确或者框架提供通用的精确定时器,可以用 timer_fd

1 、2 结合起来,如果更新、设置超时时间都是在 epoll event loop 里,就是把 priority_queue 堆顶最小超时时间作为 epoll_wait 下一轮的 timeout 参数或者 timer_fd 的超时时间,如果跨线程设置还要考虑唤醒 epoll_wait 或者更新 timer_fd 相关

这只是简单实现方案,涉及到完整框架的你还要考虑并发调用、锁、一致性等各种细节


> 这个方法刚才试了试,发现接到(event[i].events & EPOLLIN)后,无法区分是 timer_fd 还是 socket_fd ,就不能直接 accept(),因为可能接到 accept(timer_fd),就会错误,在程序看来都是 fd 。

#11 这就是说胡话了,你自己创建的 listener fd 、自己创建的 timer_fd ,你 switch case listener case timer default socket 一下就知道是哪个了,再不济,你存储 fd 对应的结构的地方,结构体加个字段标记 type 也就知道了
266 天前
回复了 CLCLCLCLCL 创建的主题 机械键盘 宁芝 X108 三模 45g 侧刻 T 系, 求助
NIZ 的品质细节是真的不行,比如支脚生硬支起来的时候键盘滑动不舒服、而且掰支脚的时候要一次发力到位否则就容易坏
燃风太丑否则就燃风了
NIZ 白色的颜值是我最喜欢的,键的触感也够好、不同克数我都喜欢,所以两把、单个克数用久了腻了切着用
如果味道太淡,可以蘸盐
再不济,加钱请技术咨询来协助定位、开发
1 ... 7  8  9  10  11  12  13  14  15  16 ... 60  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2675 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 32ms · UTC 04:18 · PVG 12:18 · LAX 20:18 · JFK 23:18
Developed with CodeLauncher
♥ Do have faith in what you're doing.