Creating a Sender/Receiver HTTP ServerTechAtBloomberg.com © 2024 Bloomberg Finance L.P. All rights reserved. • Create a basic HTTP server. • Allow a single-threaded server handling multiple clients. • Use the sender/receiver asynchronous std::execution (sender/receiver): http://wg21.link/p2300 • https://github.com/NVIDIA/stdexec.git • https://github.com/beman-project/execution26 • Sender/receiver networking: http://wg21.link/p2762 • Implementation: Implementation: https://github.com/beman-project/net29 • Async scope: http://wg21.link/p3149 Resources0 码力 | 8 页 | 2.19 MB | 6 月前3
C++高性能并行编程与优化 - 课件 - 06 TBB 开启的并行编程之旅并发:某互联网公司购置了一台单核处理 器的服务器,他正同时处理 4 个 HTTP 请求,如果是单线程的 listen-accept 循环 ,则在处理完 A 的请求之前, B 的请求 就无法处理,造成“无响应”现象。 C 的请 求进来,则还得继续排队…… • 每个请求开启一个线程来处理,这样处理 A 用户的同时还可以继续监听 B 用户发 来的请求,及时响应,改善用户体验。 • 并行:某图形学爱好者购置了一台0 码力 | 116 页 | 15.85 MB | 1 年前3
现代C++ 教程:高速上手C++11/14/17/20服务器开发中,我们通常希望服务某些满足某个条件的路由。正则表达式便是完成这一目 标的工具之一。 给定如下请求结构: 60 习题 第 6 章正则表达式 struct Request { // request method, POST, GET; path; HTTP version std::string method, path, http_version; // use smart pointer for reference ring, std::string> header; // use regular expression for path match std::smatch path_match; }; 请求的资源类型: typedef std::map< std::string, std::unordered_map< std::string,std::functionHTTP/1.1 200 OK\r\nContent-Length: " << number.length() << "\r\n\r\n" << number; }; // peocess default 0 码力 | 83 页 | 2.42 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 02 现代 C++ 入门:RAII 内存管理pdf) - [ 并行体系结构与编程 (CMU 15-418)](https://www.bilibili.com/video/av48153629/) - [ 深入理解计算机原理 (CSAPP)](http://csapp.cs.cmu.edu/) - [CMake “ 菜谱” ](https://www.bookstack.cn/read/CMake-Cookbook/README.md) - [CMake 为什么很多面向对象语言,比如 Java ,都没有构造函数全家桶这些概念? • 因为他们的业务需求大多是:打开数据库,增删改查学生数据,打开一个窗口,写入一个 文件,正则匹配是不是电邮地址,应答 HTTP 请求等。 • 这些业务往往都是在和资源打交道,从而基本都是刚刚说的要删除拷贝函数的那一类,解 决这种需求,几乎总是在用 shared_ptr的模式,于是 Java 和 Python 0 码力 | 96 页 | 16.28 MB | 1 年前3
Hello 算法 1.0.0b1 C++版源文件内容,并检查内容正确性,尽量保持排版格式统一; 3. 在页面底部填写更改说明,然后单击“Propose file change”按钮;页面跳转后,点击“Create pull request”按钮发起拉取请求即可。 12. 附录 hello‑algo.com 182 Figure 12‑1. 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述图片问题,我会第一时间重新画图并替换图片。 将本地更改 Commit ,并 Push 至远程仓库; 5. 刷新仓库网页,点击“Create pull request”按钮发起拉取请求即可; 12.2.3. Docker 部署 你可以使用 Docker 来部署本项目。稍等片刻,即可使用浏览器打开 http://localhost:8000 访问本项目。 git clone https://github.com/krahets/hello-algo0 码力 | 187 页 | 14.71 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 05 C++11 开始的多线程编程的实现背后是基于 pthread 的。 • 解决: CMakeLists.txt 里链接 Threads::Threads 即可: 有了多线程:异步处理请求 • 有了多线程的话,文件下载和用户交互分 别在两个线程,同时独立运行。从而下载 过程中也可以响应用户请求,提升了体验 。 • 可是发现一个问题:我输入完 pyb 以后, 他的确及时地和我交互了。但是用户交互 所在的主线程退出后,文件下载所在的子0 码力 | 79 页 | 14.11 MB | 1 年前3
Hello 算法 1.0.0b2 C++版源文件内容,并检查内容正确性,尽量保持排版格式统一; 3. 在页面底部填写更改说明,然后单击“Propose file change”按钮;页面跳转后,点击“Create pull request”按钮发起拉取请求即可。 12. 附录 hello‑algo.com 192 Figure 12‑1. 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述图片问题,我会第一时间重新画图并替换图片。 将本地更改 Commit ,并 Push 至远程仓库; 5. 刷新仓库网页,点击“Create pull request”按钮发起拉取请求即可; 12.2.3. Docker 部署 你可以使用 Docker 来部署本项目。稍等片刻,即可使用浏览器打开 http://localhost:8000 访问本项目。 git clone https://github.com/krahets/hello-algo0 码力 | 197 页 | 15.72 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化}; • CacheEntry cache[512]; • 当 CPU 读取一个地址时: • 缓存会查找和该地址匹配的条目。如果找到,则给 CPU 返 回缓存中的数据。如果找不到,则向主内存发送请求,等读 取到该地址的数据,就创建一个新条目。 • 在 x86 架构中每个条目的存储 64 字节的数据,这个条目 又称之为缓存行( cacheline )。 • 当访问 0x0048~0x0050 当读和写创建的新条目过多,缓存快要塞不下时,他会把 最不常用的那个条目移除,这个现象称为失效( invalid )。 如果那个条目是被标记为脏的,则说明是当时打算写入的 数据,那就需要向主内存发送写入请求,等他写入成功, 才能安全移除这个条目。 • 如有多级缓存,则一级缓存失效后会丢给二级缓存。 连续访问与跨步访问 • 如果访问数组时,按一定的间距跨步访问,则效率如何? • 从 1 到 160 码力 | 147 页 | 18.88 MB | 1 年前3
Hello 算法 1.0.0b4 C++版Q & A � 数据结构的“堆”与内存管理的“堆”是同一个概念吗? 两者不是同一个概念,只是碰巧都叫堆。计算机系统内存中的堆是动态内存分配的一部分,程 序在运行时可以使用它来存储数据。程序可以请求一定量的堆内存,用于存储如对象和数组 等复杂结构。当这些数据不再需要时,程序需要释放这些内存,以防止内存泄露。相较于栈内 存,堆内存的管理和使用需要更谨慎,不恰当的使用可能会导致内存泄露和野指针等问题。 源文件内容,并确保内容正确,同时尽量保持排版格式的统一。 3. 在页面底部填写修改说明,然后点击“Propose file change”按钮;页面跳转后,点击“Create pull request”按钮即可发起拉取请求。 16. 附录 hello‑algo.com 337 Figure 16‑1. 页面编辑按键 由于图片无法直接修改,因此需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图 将本地所做更改 Commit ,然后 Push 至远程仓库。 5. 刷新仓库网页,点击“Create pull request”按钮即可发起拉取请求。 16.2.3. Docker 部署 执行以下 Docker 脚本,稍等片刻,即可在网页 http://localhost:8000 访问本项目。 git clone https://github.com/krahets/hello-algo0 码力 | 343 页 | 27.39 MB | 1 年前3
Hello 算法 1.1.0 C++ 版& A Q:数据结构的“堆”与内存管理的“堆”是同一个概念吗? 两者不是同一个概念,只是碰巧都叫“堆”。计算机系统内存中的堆是动态内存分配的一部分,程序在运行时 可以使用它来存储数据。程序可以请求一定量的堆内存,用于存储如对象和数组等复杂结构。当这些数据不 再需要时,程序需要释放这些内存,以防止内存泄漏。相较于栈内存,堆内存的管理和使用需要更谨慎,使 用不当可能会导致内存泄漏和野指针等问题。 源文件内容,检查内容的正确性,并尽量保持排版格式的统一。 3. 在页面底部填写修改说明,然后点击“Propose file change”按钮。页面跳转后,点击“Create pull request”按钮即可发起拉取请求。 图 16‑3 页面编辑按键 图片无法直接修改,需要通过新建 Issue 或评论留言来描述问题,我们会尽快重新绘制并替换图片。 2. 内容创作 如果您有兴趣参与此开源项目,包括将代码翻译成 ,然后 Push 至远程仓库。 5. 刷新仓库网页,点击“Create pull request”按钮即可发起拉取请求。 第 16 章 附录 hello‑algo.com 367 3. Docker 部署 在 hello-algo 根目录下,执行以下 Docker 脚本,即可在 http://localhost:8000 访问本项目: docker-compose up -d 使用以下命令即可删除部署:0 码力 | 379 页 | 18.47 MB | 1 年前3
共 144 条
- 1
- 2
- 3
- 4
- 5
- 6
- 15













