V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Karte  ›  全部回复第 1 页 / 共 6 页
回复总数  104
1  2  3  4  5  6  
certbot 自动更新替换, 和 acme.sh 一个道理.
方案三:
直接用现成的消息队列, 把要处理的消息丢到队列里. 消费者直接多线程从消息队列中获取数据处理. 这个开发方案是可以做到代码量最小.
方案二:

1. 创建一个对象, 对象记录一个查询位置, 查询数量.
2. 每个线程通过加锁读取该对象获取位置和数量, 并在获取后更新当前查询位置. 释放锁
3. 通过之前获取到的查询位置, 查询数量从数据库获取一段范围的数据.
4. 将数据丢入线程本地队列, 依次处理.
5. 对暂时放弃的数据 id 存入 步骤一 对象中. 采用 CopyOnWrite 方法更新对象值.

这个方案将查询 IO 放入到了每个线程, 线程只需要在获取当前处理位置时加锁就好了. 这样锁的时间十分短暂, 几乎可以做到 "无锁" 的情况. 但是需要注意线程数量, 查询数量参数; 尽可能的将线程数拉小, 查询数量拉大, 这样线程可以更专注处理数据, 而不是一直等待 IO 返回.
1. 创建一个带有并发控制所的队列.
2. 每个线程从该队列中获取数据.
3. 在获取数据时, 如果队列为空, 则由当前线程请求数据库, 批量读取数据丢入队列.
4. 数据暂时放弃时, 将数据丢入队列底部.

这样就好了. 在读取数据时通过锁做到数据获取无冲突, 而且不会有重复的数据从数据库中读取; 另一方面也降低了 IO 请求.

这个方案的缺点在获取数据时会有锁的存在, 如果数据处理比较快, 可能会遇到其他线程在等待其中一个线程读取数据库的返回.
我选 K70 PRO
95 天前
回复了 perbugwei 创建的主题 NGINX 关于 nginx 代理的问题
nginx redirect (rewrite) 不支持 POST 转发.
96 天前
回复了 somereason 创建的主题 Android 给安卓手机换高容量电池可行吗?
这么高是想做炸弹嘛, 第三方的电芯都敢用.
你先明确你的目的, 使用需求, 充电习惯之类的. 8000mA 的都是给跑外卖的, 长时间在外, 且一直开着导航的那批用户设计的. 假设你每日都回家充电, 使用频率不高, 没必要换大容量的电芯, 直接换一个相同容量或者稍微高一点的品牌电芯就好了.
在你购买的时候, 不要给自己创造需求. 按照你当前的需求去选购是最好的, 臆想的需求永无止境, 干脆直接搭电网上算了.
114 天前
回复了 RedBeanIce 创建的主题 数据库 搭建 [物联网] 数据中台
td engine 虽然是很适合物联网数据, 但是极其不稳定, 很不推荐. bug 没人修, 版本升级问题, 驱动问题.
@sexyback 整个 openClash 的进程异常退出了, 界面上的提示从 启动 -> XXX 了.
每次断的时候, openClash 上的 TUN 都是异常状态, 然后再恢复回来的.
之前用 N1 弄了个 openClash + TUNEL , 那时候经常断的. 后来把 openClash 关掉就好了.
124 天前
回复了 mk3s 创建的主题 宽带症候群 运营商在 618 期间有什么宽带优惠没
@zhoust 哪里哪里
MjQ0MTA1OTI0NEBxcS5jb20=
1  2  3  4  5  6  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2035 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 30ms · UTC 01:06 · PVG 09:06 · LAX 18:06 · JFK 21:06
Developed with CodeLauncher
♥ Do have faith in what you're doing.