Gearman provides a generic application framework to farm out work to other machines or processes that are better suited to do the work.
Gearman提供了能把任务分发(承包)给其他更适合做该任务的机器或程序来处理的一个通用应用程序框架。
It allows you to do work in parallel, to load balance processing, and to call functions between languages.
它允许你并行操作,负载均衡处理以及在不同的语言调用函数。
It can be used in a variety of applications, from high-availability web sites to the transport of database replication events.
它可以应用到诸如高性能网站,数据库复制事件传输等多类应用程序中。
In other words, it is the nervous system for how distributed processing communicates.
换句话说,它就是分布式处理赖以交互的神经系统。
A few strong points about Gearman:
以下是几个关于Geaman的要点:
- Open Source It’s free! (in both meanings of the word) Gearman has an active open source community that is easy to get involved with if you need help or want to contribute. Worried about licensing? Gearman is BSD.
- 开源 It's free! (包括free的两个意思,自由和免费) Gearman有一个活跃的开源社区,不论你用寻求帮助或共享资源,你都可以很容易的加入其中。担心版权问题吗?Gearman是BSD开源模式的。
- Multi-language - There are interfaces for a number of languages, and this list is growing. You also have the option to write heterogeneous applications with clients submitting work in one language and workers performing that work in another.
- 多语言支持 它有支持很多语言的应用接口,并且还在不断强化中。你可以使用一种语言编写不同的客户端应用程序,而处理端的处理平台用另一种语言来编写。
- Flexible - You are not tied to any specific design pattern. You can quickly put together distributed applications using any model you choose, one of those options being Map/Reduce.
- 灵活的 - 不必局限于某种设计模式。你可以用你选择的模型很快的把分散的程序合并起来,众多方法中有一种就是Map/Reduce。
- Fast - Gearman has a simple protocol and interface with an optimized, and threaded, server written in C/C++ to minimize your application overhead.
- 快速的 - Gearman有一个简单的协议和用C/C++编写的线程优化的服务来减少你应用程序的开销。
- Embeddable - Since Gearman is fast and lightweight, it is great for applications of all sizes. It is also easy to introduce into existing applications with minimal overhead.
- 可嵌入式的 - 因其高效和轻量级的,Gearman对各种体积的程序都是极适用的。它也可以积小的开销嵌入到已存在的程序中。
- No single point of failure - Gearman can not only help scale systems, but can do it in a fault tolerant way.
- No limits on message size - Gearman supports single messages up to 4gig in size. Need to do something bigger? No problem Gearman can chunk messages.
- 数据信息大小不限 - Gearman可以支持达4G的信息。需要更大吗?没问题,Gearman可以分块化。
- Worried about scaling? - Don’t worry about it with Gearman. Craig’s List, Tumblr, Yelp, Etsy,… discover what others have known for years.
How Does Gearman Work?
Gearman如何工作?
A Gearman powered application consists of three parts: a client, a worker, and a job server. The client is responsible for creating a job to be run and sending it to a job server. The job server will find a suitable worker that can run the job and forwards the job on. The worker performs the work requested by the client and sends a response to the client through the job server. Gearman provides client and worker APIs that your applications call to talk with the Gearman job server (also known as gearmand) so you don’t need to deal with networking or mapping of jobs. Internally, the gearman client and worker APIs communicate with the job server using TCP sockets. To explain how Gearman works in more detail, lets look at a simple application that will reverse the order of characters in a string. The example is given in PHP, although other APIs will look quite similar.
基于Gearman的程序包括三部分:一个client(发起者),一个worker(处理者),一个job server(分派者)。client端负责运行一个job并把它传送到server端。job server 端。job server端找到可以处理传送过来的job的worker,并且让worker处理该job。 worker处理client的请求并通过job server把处理结果返回给client。Gearman提供了可以和job server(也叫gearmand)交互的woker和client的API, 因而你不必处理网络或映射问题。在内部,client和worker的api通过TCP socket和job server进行交互。我们通过一个反转字串顺序的程序来加以解释Gearman的详细工作过程。该例子用PHP语言,其它的语言API也是大概如此。
We start off by writing a client application that is responsible for sending off the job and waiting for the result so it can print it out. It does this by using the Gearman client API to send some data associated with a function name, in this case the function reverse
. The code for this is (with error handling omitted for brevity):
我们从写一个小client程序开始,这个程序负责发送一job(任务)并等待结果然后把结果打印出来。通过使用Gearman的client API来发送一些关联函数名的数据, 在这个小例子中函数名为"reverse"。代码如下:
<?php // Reverse Client Code $client = new GearmanClient(); $client->addServer(); print $client->do("reverse", "Hello World!");
This code initializes a client class, configures it to use a job server with add_server
(no arguments means use 127.0.0.1
with the default port), and then tells the client API to run the reverse
function with the workload “Hello world!”. The function name and arguments are completely arbitrary as far as Gearman is concerned, so you could send any data structure that is appropriate for your application (text or binary). At this point the Gearman client API will package up the job into a Gearman protocol packet and send it to the job server to find an appropriate worker that can run the reverse
function. Let’s now look at the worker code:
这段代码初始化了一个client,用add_server设置它使用一个job server(没有参数表示用127.0.0.1默认端口),然后告诉client的API调用reverse函数来处理"Hello world!"数据。对Gearman来说,函数名和参数都都是任意的,所以你可以发送任何适合你应用程序的的数据结构(可以是文本或二进制数据)。在这里,Gearman client API 将把这个任务打包到一个Gearman协议包的job然后把它发送到job server来找个合适的可以运行reverse函数的worker。下面我们看看worker的代码:
<?php // Reverse Worker Code $worker = new GearmanWorker(); $worker->addServer(); $worker->addFunction("reverse", "my_reverse_function");
function my_reverse_function($job) { return strrev($job->workload()); } while ($worker->work());
This code defines a function my_reverse_function
that takes a string and returns the reverse of that string. It is used by a worker object to register a function named reverse
after it is setup to connect to the same local job server as the client. When the job server receives the job to be run, it looks at the list of workers who have registered the function name reverse
and forwards the job on to one of the free workers. The Gearman worker API then takes this request, runs the function my_reverse_function
, and sends the result of that function back through the job server to the client.
代码定义了一个my_reverse_function函数来接收字串并返回该字串的的倒序。当以client方式连接到本地的job server后,worker就把它注册到本身且命名为reverse。当job server接收到请求的job包, 它就搜索那些已经注册reverser函数的worker,然后选择空闲的worker来处理请求的job包。Gearman worker API获取job请求,根据job请求的参数运行my_reverse_function,然后通过job server把函数的处理结果发送给client端。
As you can see, the client and worker APIs (along with the job server) deal with the job management and network communication so you can focus on the application parts. There a few different ways you can run jobs in Gearman, including background for asynchronous processing and prioritized jobs. See the documentation available for the various APIs for details.
如你所见,client和worker的APIs(通过job server)已经处理工作(job)管理和网络交互, 这样你可以把重点放到程序开发上来. 有几种方式可以运行工作(job), 包括异步处理和分期作业. 详细请看相关文档.
How Is Gearman Useful?
用途
The reverse example above seems like a lot of work to run a function, but there are a number of ways this can be useful. The simplest answer is that you can use Gearman as an interface between a client and a worker written in different languages. If you want your PHP web application to call a function written in C, you could use the PHP client API with the C worker API, and stick a job server in the middle. Of course, there are more efficient ways of doing this (like writing a PHP extension in C), but you may want a PHP client and a Python worker, or perhaps a MySQL client and a Perl worker. You can mix and match any of the supported language interfaces easily, you just need all applications to be able to understand the workload being sent. Is your favorite language not supported yet? Get involved with the project, it’s probably fairly easy for either you or one of the existing Gearman developers to put a language wrapper on top of the C library.
上面倒序字串的例子好像很多工作是运行一个函数,但还有许多其他可以用法。一个最简单的例子就是可以把Gearman当作不同语言之间的接口。如果你想让你的PHP web程序调用C语言写的函数,你可以用PHP的client API写client端, 用C写worker端,定一个job server在两者之间。当然,还有更多不同的方式来实现类似的功能,如可以用一个PHP client端和一个Python的worker端,或者可能是MySQL client端和一个Perl worker端。。。。
相关推荐
Reactive Programming helps us write code that is concise, clear, and readable. Combining the power of reactive programming and PHP, one of the most widely used languages, will enable you to create web...
宇宙人.zip
内容概要:本文介绍了基于CarSim和Simulink的ACC自适应巡航控制联合仿真模型。该模型由两部分组成:上层控制器采用ACC策略,负责根据车辆周围环境调整车速和跟车距离;下层控制器采用PID控制,确保车辆准确跟随上层指令。此外,还包含车辆逆动力学模型,用于模拟真实车辆的动态响应。文中详细解释了cpar文件的作用及其参数设置方法,并展示了如何在Simulink中搭建PID控制器。通过仿真,验证了模型在复杂道路环境下的有效性,展示了车辆能够根据前方车辆的速度和距离自动调整车速和跟车距离,保持安全行驶。 适合人群:从事自动驾驶技术研发的工程师和技术研究人员。 使用场景及目标:适用于需要对ACC系统进行深入研究和测试的场景,旨在帮助研发人员更好地理解和优化ACC策略,提高自动驾驶的安全性和可靠性。 其他说明:该模型为自动驾驶技术的研发提供了有效工具,有助于推动相关技术的进步和发展。
异业联盟红包拓客 2.12.2.zip
内容概要:本文详细介绍了Simulink锂离子电池模型的功能和技术解析。该模型主要用于模拟锂离子电池的充电和放电过程,能够设定功率进行充放电并实时监测电池的电压、电流、温度和SOC。它提供了数据输入与设置、实时监测与数据分析等功能,确保了模型的准确性和可靠性。通过该模型,工程师可以深入了解电池的性能特点,预测其在实际使用中的表现,从而为产品研发和优化提供依据。 适合人群:从事电动汽车、可再生能源以及储能系统研究和开发的工程师和技术人员。 使用场景及目标:①电动汽车研发:模拟电池性能,提升车辆性能和稳定性;②可再生能源领域:分析电池特性,促进能源开发和利用;③储能系统仿真:优化储能系统设计,提高电力系统效率。 其他说明:该模型不仅适用于特定领域的研究,还可扩展到其他需要模拟和分析电池性能特点的领域。
实训商业源码-飞飞CMS最新版本DC04电脑端网站模板-毕业设计.zip
内容概要:本文详细介绍了新能源电动汽车中VCU(车辆控制单元)和BMS(电池管理系统)的硬件在环(HIL)仿真技术及其重要性。文中阐述了VCU和BMS在电动汽车中的角色,解释了硬件在环仿真技术的概念及其在电动汽车研发中的应用。重点讨论了电动汽车整车建模的方法,涵盖驾驶员模块、仪表模块、BCU整车控制器模块、MCU电机模块、TCU变速箱模块、减速器模块、BMS电池管理模块等多个子系统的建模。此外,文章还探讨了HIL仿真的具体应用场景和优势,强调其在降低成本、提高效率和安全性方面的作用。 适合人群:从事新能源汽车研发的技术人员、研究人员及相关领域的学生。 使用场景及目标:适用于希望深入了解电动汽车VCU和BMS硬件在环仿真技术的研究人员和技术人员,旨在帮助他们掌握相关技术和工具,提升电动汽车的研发和测试能力。 其他说明:文章提供了详细的模块介绍和仿真技术的应用案例,有助于读者更好地理解和应用HIL仿真技术于实际项目中。
实训商业源码-手动安装视频教程-毕业设计.zip
内容概要:本文探讨了模型预测控制(MPC)在两相交错并联Boost变换器中的应用,特别是在Matlab/Simulink环境下对其快速响应、均流特性的仿真研究。文中介绍了MPC的基本概念,强调了它在应对电压跳变和负载突变时的优势。同时,还比较了纯MPC与PI+MPC两种控制方法的效果,指出后者在稳态误差和响应速度方面表现更优。 适合人群:从事电力电子、自动化控制领域的研究人员和技术工程师。 使用场景及目标:适用于需要深入了解MPC理论及其在具体硬件平台上的实施细节的人群;旨在提升电力转换设备的效率和可靠性。 其他说明:文章提供了详细的实验数据和图表支持,有助于读者直观理解不同控制策略下系统的动态行为。此外,文中提及的所有仿真均是在Matlab/Simulink平台上完成的,这为后续的实际工程应用打下了坚实的基础。
实训商业源码-炫酷恶趣强大的制作神器小程序源码_支持多种流量主模式-毕业设计.zip
内容概要:本文详细介绍了DSP28335芯片通过Bootloader和CAN通信实现在线固件升级的方法。首先解释了Bootloader的工作原理,即芯片上电后运行固化在Flash中的Bootloader程序,通过CAN接收新固件数据,擦除旧程序并写入新程序,最后跳转到用户程序执行。文中提供了具体的CAN初始化代码(如设置CCR配置位)以及上位机Python代码用于发送固件数据。还特别提到了版本校验的重要性,并给出了一种优化后的CRC32校验算法。此外,文档中提到一些常见问题及其解决方案,如CAN设备丢包问题和硬件干扰问题。 适合人群:嵌入式系统开发者、DSP芯片使用者、固件开发工程师。 使用场景及目标:适用于需要对DSP28335或其他类似DSP芯片进行固件升级的场景,帮助用户掌握Bootloader的应用和CAN通信的具体实现方法,确保固件升级的成功率。 其他说明:文档不仅提供理论讲解,还有详细的代码示例和操作步骤,甚至包括了一些实际操作中遇到的问题及解决方案,非常适合初学者和有一定经验的研发人员学习和参考。
实训商业源码-电影门户苹果CMS主题模板下载-毕业设计.zip
基于骨骼三维信息结合隐马尔科夫模型人体动作识别方法.pdf
内容概要:本文详细探讨了锂电池的SOC(荷电状态)与BMS(电池管理系统)的关系,重点介绍了2-RC模型及其在BMS中的应用。文中通过MATLAB Simulink进行仿真,展示了如何测试和验证SOC估算算法的精度,并讨论了提高算法精度的方法和技术。此外,还深入探讨了均衡模型的实现及其对电池组一致性的改善,最后介绍了BMS硬件电路PCB设计的关键步骤。 适合人群:从事电池管理系统的工程师、研究人员以及对锂电池技术和仿真有兴趣的技术爱好者。 使用场景及目标:适用于希望深入了解锂电池SOC估算、BMS系统设计、仿真测试及硬件电路设计的专业人士。目标是提升对锂电池管理和仿真的理解和技能。 其他说明:文章不仅涵盖了理论知识,还包括具体的代码示例和实际应用场景,有助于读者全面掌握相关技术并应用于实践中。
实训商业源码-小说系统-毕业设计.zip
内容概要:本文详细介绍了永磁同步电机(PMSM)转速环采用自抗扰控制(ADRC)进行仿真的方法和技术细节。首先解释了ADRC的核心组成部分:跟踪微分器(TD)、扩张状态观测器(ESO)和非线性反馈(NLSEF),并通过MATLAB代码展示了ESO的具体实现方式。接着给出了PMSM的机械运动方程及其Python代码实现,强调了负载转矩作为主要扰动源的影响。文中对比了ADRC与传统PID控制器在面对负载突变时的表现,指出ADRC能够更快地响应并稳定系统。最后提供了ADRC参数调整的经验技巧,如TD和ESO带宽的选择以及非线性因子α的限制条件。 适用人群:对永磁同步电机控制系统感兴趣的工程技术人员、研究人员及高校相关专业学生。 使用场景及目标:适用于需要提高永磁同步电机转速环鲁棒性和动态性能的应用场合,如工业自动化设备、电动汽车驱动系统等。目标是掌握ADRC的工作原理及其在PMSM控制中的具体应用方法。 其他说明:文中提供的代码片段和参数设定建议为实际项目实施提供了宝贵的参考资料,有助于缩短开发周期并提升系统的可靠性。
内容概要:本文详细介绍了利用CST Studio进行极化转换和非对称传输仿真的方法和技术要点。首先讲解了如何通过参数化建模构建用于极化转换的关键结构(如箭头型金属贴片),并强调了参数化设计的优势。接着讨论了边界条件和端口设置的具体步骤,确保仿真结果的准确性。随后提供了电场矢量图的后处理脚本,帮助直观判断极化转换的效果。最后探讨了非对称传输特性的验证方法,包括参数扫描和数据处理技巧。文中还分享了一些常见的仿真陷阱及其解决方案。 适合人群:从事微波工程、天线设计以及电磁兼容性研究的专业人士,尤其是有一定CST仿真经验的研究人员。 使用场景及目标:适用于需要深入理解和掌握CST仿真工具在极化转换和非对称传输领域的应用场合。目标是提高仿真精度,优化设计方案,缩短研发周期。 其他说明:文章不仅提供具体的技术细节,还包括实用的经验分享和避坑指南,有助于读者快速上手并解决实际问题。
运动步数宝步步换购小程序 V4.5.1.zip
数据集介绍:多类别农产品目标检测数据集 一、基础信息 数据集名称:多类别农产品目标检测数据集 图片数量: - 训练集:2,873张图片 - 验证集:738张图片 - 测试集:357张图片 总计:3,968张标注图片 分类类别: 覆盖36种常见农产品,包括: - 水果类:苹果、香蕉、蓝莓、樱桃、葡萄、猕猴桃、桃子、梨、菠萝、西瓜等 - 蔬菜类:朝鲜蓟、芦笋、甜菜、西兰花、卷心菜、胡萝卜、黄瓜、茄子、羽衣甘蓝、洋葱、南瓜、菠菜等 - 其他作物:玉米、马铃薯、红薯、西葫芦等 标注格式: YOLO格式,包含边界框和类别编号,支持主流目标检测框架直接调用。 数据特性: 覆盖农产品生长周期不同阶段的形态,包含复杂田间背景下的目标检测场景。 二、适用场景 农业自动化分拣系统: 支持开发果蔬分拣机器人视觉模块,实现多品类农产品的自动识别与定位。 智能农业监测系统: 用于田间作物生长监测,支持产量预估、成熟度判断等农业AI应用开发。 食品加工质检应用: 可训练模型检测农产品外观缺陷,适用于食品加工流水线质量控制系统。 农业学术研究: 为精准农业、农业机器人等研究方向提供标准化检测数据集。 农业教育工具: 适用于农业院校教学实验,帮助学生学习AI在农业场景的应用实践。 三、数据集优势 类别丰富性强: 涵盖36种全球主流农产品,包含水果、蔬菜、根茎作物等多品类目标,满足复杂农业场景需求。 标注专业度高: 采用YOLO标准格式标注,所有边界框均经过人工校验,确保遮挡目标、小目标标注准确性。 数据平衡性好: 各类别样本量经均衡处理,避免长尾分布问题,适合工业级模型训练。 应用扩展性强: 除目标检测外,支持扩展至产量统计、尺寸测量等农业计算机视觉任务。 实际价值突出: 数据采集自真实农业场景,包含不同光照条件、遮挡情况的样本,可直接部署于农业智能化应用。
内容概要:该数据集专注于课堂上学生的行为检测,特别是针对玩手机和睡觉两种不良行为。数据集由2388张图片组成,每张图片均配有Pascal VOC格式的xml文件和YOLO格式的txt文件作为标注文件,确保了数据的多样性和灵活性。数据集中共包含三种标注类别:“normal”(正常)、“play phone”(玩手机)和“sleep”(睡觉),对应的标注框数量分别为20238、10795和3763,总计34796个框。所有图片和标注均由labelImg工具完成,采用矩形框标注法。; 适合人群:计算机视觉领域研究人员、机器学习爱好者、高校教师及学生等。; 使用场景及目标:①可用于训练和评估课堂行为识别模型,提高课堂管理效率;②适用于研究和开发基于图像的学生行为监测系统,帮助教师及时发现并纠正不良行为。; 其他说明:数据集仅提供准确且合理的标注,不对由此训练出的模型或权重文件的精度作出任何保证。