- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 Fcopy: 基于Coke实现内网大文件分发
本文中提到的内网为网络延迟基本在毫秒级、基本不丢包、传输基本不出错的网络环境。本文提到的朴素办法可以认为是依托现有条件,以无需额外增加硬件、也无需过多维护开销为前提的办法。本文提到的大文件约为1G-1T的文件,小文件直接传输也可朴素地快速完成,超大文件估计需要硬件支持。小文件(1M以内): 写个简单循环,逐个向目标机器发送即可中等文件(1M-1G): 一般可以搭建文件服务器,目标机器并发地从文件服务器拉取文件大文件(1G-1T): 本文讨论的方法。
2023-12-10 13:43:41
213
原创 Coke(七):使用协程实现文件读写
中有五种基础任务:通讯、计算、文件IO、定时器、计数器,在coke项目中也分别对应着一组基础组件。其中计数器通常用来实现功能更复杂的复合组件,coke中暂时不会有一个通用的计数器基础组件,因此本文要介绍的文件IO应当是基础组件中的最后一个了。有了这些基础组件,原则上就可以实现与之相关的所有功能了,但这还远远不够。相比于其他异步任务,作者在实际工作中很少遇到异步文件IO相关的场景,因此在设计更易用的接口时遇到了瓶颈,若读者有相关的场景或好的设计想法,欢迎到项目ISSUE中讨论。的文件IO接口,具体如下。
2023-12-10 13:35:37
92
原创 Coke(六):有趣的定时器任务
可在多个协程中同时使用,且重置qps的操作也是多线程安全的,例如可以单独启动一个线程或协程来监听外部事件,当发生某些情况时可以立刻重置qps值,以紧急应对特殊的需求。当然,限制qps只是个简单的君子协定,具体的业务还需具体分析,做出符合实际的合理的规划。对需求简单地分析可以发现,只需要在发起请求前等待一段时间,让每个请求都以一定的间隔均匀地发出即可,有了定时器这个组件,这个功能便可以很容易地实现。定时器任务的一个特性是一定会将当前协程挂起,即使指定的时间是0纳秒,也会让出执行权限,并由调度器重新调度任务。
2023-09-16 16:13:37
241
原创 Coke(五):协程任务的同步/异步等待
对于同步等待的使用方式,作者认为只需要常见的这一种即可,通过这种方式启动一个协程,其他所有的操作都以异步等待的方式实现,并牢记“仅在同步函数中使用同步等待,仅在协程中使用异步等待”。的使用方法,不会深入介绍协程的太多概念,如果此前未从了解过协程,请一定避免陷入“必须先完全搞懂底层机制再学如何使用”的泥淖,就像小学教加法交换律前不会教阿贝尔群的概念一样,先把简单的用法搞起来,以后有的是机会了解机制。令人惊喜的是,在协程中组织任务的方式非常直观和灵活,无需复杂的机制来实现并行,而是提供了方便的。
2023-09-16 16:12:21
117
原创 Coke(四):优雅地调度计算任务
一般来说,当网络任务完成时,后续的代码会被调度到一组用于处理该任务的线程组中运行(即C++ Workflow中的handler线程),此时可以对网络任务结果进行简单的处理,发起新的异步任务或者结束当前函数。但当你遇到多个计算任务和其他任务互相穿插的时候,你会再回来考虑它的,因此不必惊慌,仅把它当做语法糖,按个人喜好使用即可。作为C++协程框架,Coke当然可以优雅地发起计算任务,我们以“计算一组数据的和”为例,先直观地了解一下发起计算任务的方式。可为何一定要切换到计算线程呢,在当前线程直接计算可以吗?
2023-09-16 16:09:26
95
原创 Coke(三):使用HttpClient的更多功能
支持的功能,所以重定向功能会被禁用,且根据上一篇文章的讨论,使用coke可以很便捷地实现重定向的功能。提供的组件以协程的方式发起任务,但由于会带来关于生命周期的一系列问题,此处不展开讨论,后续会补充到。上一篇文章通过几个示例介绍了如何使用Coke便捷地发起Http请求,本文延续上一个话题,将。是封装了workflow的Http任务的语法糖,它本身并不维护任务的状态等信息。中,Http任务通常通过工厂函数创建,并且可以指定重试次数等参数。目前的代理仅支持http代理,而http代理又有两种模式。
2023-07-15 13:30:00
122
原创 Coke(二):便捷地发起Http请求
借助C++ 20提供的协程组件,Coke使C++ Workflow的任务以顺序的方式编写,大大简化了理解的复杂度。参数来指定重定向的次数,这会在一次任务中自动实现重定向,调用方直接得到最终结果,然而在实际应用中有些场景需要获得重定向的中间结果。来等待异步任务返回,而不可以使用同步的方式等待,以免导致阻塞。一句话,完成了Http GET请求的创建、发送以及同步等待结果,充分体现了Coke的便捷性。的使用方法,借助这些组件,遍历Http的消息内容也是非常方便的。在上述示例代码中,主函数通过关键的。
2023-07-15 11:00:00
163
原创 Coke(一):优秀的C++ Workflow支持协程啦
项目是一个高性能的协程库,基于C++ 20提供的协程组件开发,提供一组简洁的异步接口,而其后台则是由C++ Workflow强力驱动。使用Coke可以轻松地创建协程任务,并通过C++ Workflow的调度器高效地调度和执行,Coke希望为大家带来一种新颖的体验C++ Workflow的方式。是一款高性能的异步编程范式,自Github开源以来,已经收货了一万多枚Star,得到了越来越多的认可。Coke项目正在开发中,有想法或建议的同学欢迎提Issue或Pull request!本系列文章同步发布于。
2023-05-28 09:00:00
185
原创 C++大整数运算
C++大整数运算系列文章讲述了实现大整数四则运算的基本思路和方法,对算法做简单的介绍并采用C++代码做进一步说明。本文并不试图写成一篇教程,而是对实现过程进行整理和概括。
2017-02-22 12:50:30
13831
原创 基于c++11 的高精度计时器
基于c++11 的高精度计时器个人博客 http://blog.kedixa.top c++11 增加了用于处理时间的标准库<chrono>,于是便可以很方便的实现一个程序计时器,用于测量某段代码执行所使用的时间。timer.h如下:#ifndef TIMER_H_#define TIMER_H_#include<chrono>#include<string>namespace kedixa
2015-12-04 23:14:06
5706
1
原创 Ubuntu 安装openGL
Ubuntu 安装openGL在Ubuntu下使用 Qt5 开发Qt程序时,提示can not find -lGL首先安装基本编译环境sudo apt-get install build-essential安装 OpenGL Librarysudo apt-get install libgl1-mesa-dev安装OpenGL Utilitiessudo apt-get install libglu
2015-07-09 13:16:03
911
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人