拓展
文章平均质量分 67
陌生领域
假如子弹换成糖果
目前大部分学习wiki更新在baidu内网wiki中。
展开
-
bthread(一) 前言
前言建议配合代码库看,一切以代码为准:https://github.com/apache/incubator-brpc/tree/master/src/bthread感受bthread为brpc的核心,设计的初衷其实是在充分利用cpu的情况下保证数据的局部性,在设计过程中遇到的各种问题戈大神团队参考了多种linux内核原语进行了重写和实现,其中比较核心的设计为每TaskGroup的_rq无锁队列的设计以及work stealing调度的各种逻辑实现,目的都是在尽可能少加锁的情况下实现线程调度的功原创 2021-04-01 01:35:25 · 452 阅读 · 3 评论 -
bthread(五) 无锁队列rq的代码实现
基本介绍初始化时b=t=1,代表队列为空,load是取值,store是赋值,push是从队尾添加(b+1),pop是从对首弹出(正常是b-1,有竞争了t+1),steal是从对首偷(t+1)。所以,b=t时队列为空,b=t+1时队列有1个元素。竞争情况由于对于此队列的push和pop操作发生在一次流程的两个阶段,所以不会产生竞争,push和steal不需要对一个元素竞争那么竞争就发生在pop和steal以及steal和steal中。比如:当前只有一个bth在队列里,tg1想从rq里pop一个,t原创 2021-04-01 01:20:21 · 380 阅读 · 0 评论 -
bthread(四) bthread用户接口和代码执行路径
bthread用户接口bthread_t(类似pthread_t):64位int,前32位版本号防止ABA问题(释放后又重新被分配了,歧义),后32位为资源池(无全局竞争可O(1)访问的数组)中下标,可以很快地找到TaskMeta(里面有个变量就是这个bth的栈)起bth基本函数bthread_start_urgent &bthread_start_background 里面都是先判断g是否为空(是否运行在worker里),是的话运行start_xxx,不是运行start_from_n.原创 2021-04-01 01:19:07 · 807 阅读 · 0 评论 -
bthread(二) 线程模型及bthread
线程模型pthread:1:1,一个内核线程里只有一个用户线程,作为独立的调度单元可以被调度到多个cpu上优点:多核扩展性好,起多个用户线程可以跑在多个cpu上 缺点:多个用户线程之间数据交互,互斥访问增加代码复杂度,即使用原子变量,当用户线程从cpu0切换到cpu1时,data要从L1 cache同步到其他cpu(锁住总线),所以起太多的pthread对于内核调度压力较大协程(改进):n:1,n个用户线程跑在一个内核线程(一个cpu)优点:无多线程竞争,写代码容易些,因为跑在一个cpu上,原创 2021-03-30 01:06:48 · 770 阅读 · 0 评论 -
bthread(六) 小结
brpc内如何用的bthread以epoll为例举例,epoll线程跑在bthread里,io bthread是按需起的(只要有读、写事件来就起一个,对于一个fd只起一个读线程和线程),用户回调也是跑在bthread【Q1】如果在callback里阻塞整个worker,其他worker会偷过来运行,但是万一所有worker都被阻塞住,那就gg了。【Q2】如果在callback里发起brpc,只会阻塞当前bthread,底层的worker不受影响,他发现后就移出rq,这时,这个callback原创 2021-04-01 01:24:49 · 815 阅读 · 0 评论 -
bthread(三) bthread数据结构
TaskControl base::atomic<size_t> _ngroup; TaskGroup** _groups;// TaskGroup对象指针的数组 base::atomic<int> _concurrency;// TC启动时的默认起的pthread数量,可以理解为bthread并发度数量,静态开关配置为9 std::vector<pthread_t> _workers;/...原创 2021-04-01 01:11:02 · 361 阅读 · 0 评论 -
Tinyhttpd学习
学习一个简易的http服务器开源代码,来源:https://github.com/EZLippi/Tinyhttpd由于该代码不能直接在linux上运行,需要进行一些修改,项目部署参考:tinyhttpd在Linux编译以及HTTP服务器的本质:tinyhttpd源码分析及拓展启动后可直接通过浏览器访问IP和端口号进行测试。经典图摘自:Tinyhttpd精读解析具体的代码也有很多人写过了,这里总结一下自己学到的东西。startup函数绑定监听套接字等操作非常常规,然后在accept接原创 2020-05-17 23:05:03 · 703 阅读 · 2 评论 -
敏捷开发
一、敏捷开发概念【传统瀑布式开发】因为需求经常改动,所以开发人员需要做增量交付、迭代式开发,并且能够持续发布。敏捷开发只是一种模式,以用户的需求进化为核心,强调适应性而非预见性。把一个大项目拆成多个互相联系的小项目,多个小项目可分别完成并独立运行,要保证主体软件随时可发布可交付给用户。敏捷就是一种科学地做事的方式!二、敏捷开发人员架构的划分部门→项目组→小团队(9-...原创 2020-05-02 01:08:41 · 463 阅读 · 0 评论 -
爬虫学习
目的虽然现在流行用python写爬虫方便很多,但还是想巩固一下自己的c++知识,linux环境中开发并测试。逻辑图代码https://github.com/ucasxzzzh/spider.git编写过程中知识点【解析URL函数】解析过程中用str.find()函数判断输入的 url 中是否存在 http:// 或 https://,再从其后找第一个 / 的位置...原创 2020-04-27 00:26:32 · 310 阅读 · 0 评论 -
初识RPC
RPC(Remote Procedure Call)远程过程(方法)调用,实现RPC这个概念有多种方式,“client访问server上的函数”。最开始为的就是满足分布式通信,根儿上是二进制数据传输 TCP/IP步骤演进V1 最简单的c/s通信,套接字等V2 相当于把网络和读写数据的活抽象到stub类里去做,程序员只调stub类提供的方法就行,屏蔽了网络的具体实现细节...原创 2020-04-22 23:21:02 · 297 阅读 · 0 评论 -
服务器相关
购买服务器http://211.159.159.45/利用 wordpress 搭建博客(参考:https://zhuanlan.zhihu.com/p/48872802)可写文章搭建 jupyter notebook(简单爬虫参考:https://zhuanlan.zhihu.com/p/29433134?utm_source=wechat_session)可练习写python...原创 2020-04-18 00:42:40 · 266 阅读 · 1 评论 -
初识计算广告
第一部分 认识商业化体系免费倾销+后向变现互联网三项可变现核心资产知名协会:iab、4A、ANA直观认识在线广告:目的与形式品牌触达(Brand Awareness):提升长时期内的转化率和利润直接效果(Direct Response):有短期内明确用户转换行为诉求投入产出比 Return on Investment ROI偏直接效果性广告形式:条幅广告(Ban...原创 2020-03-23 21:31:07 · 529 阅读 · 0 评论 -
Kubernetes 简述
简介 Kubernetes 是一个全新的基于容器技术的分布式架构领先方案。Kubernetes(k8s) 是 Google 开源的容器集群管理系统(谷歌内部:Borg)。在 Docker 技术的基础上,为容器化的应用提供部署运行、资源调度、服务发现和动态伸缩等一系列完整功能,提高了大规模容器集群管理的便捷性。 Kubernetes 是一个完备的分布式系统支撑平台,具有完备的集...原创 2018-10-15 17:32:36 · 359 阅读 · 0 评论 -
Hadoop 简述
大数据1、有海量的数据2、有对海量数据进行挖掘的需求3、有对海量数据进行挖掘的软件工具(hadoop、spark、storm、flink、tez、impala......) 大数据的具体应用电商推荐系统:基于海量的浏览行为、购物行为数据,进行大量的算法模型的运算,得出各类推荐结论,以供电商网站页面来为用户进行商品推荐。精准广告推送系统:基于海量的互联网用户的各类数据,统...原创 2018-10-11 16:46:11 · 667 阅读 · 0 评论