参考的教程链接是

https://www.cnblogs.com/migrantworkers/p/6973459.html

1.Perl 多线程的使用,join 和 detach 的区别 ,join 会阻塞主线线程, detach  会把子线程从主线程中剥离出去,不会阻塞主线程。

2.很多的时候需要多线程访问数据库但是在多线程访问数据库的时候会出现问题,很多时候不支持多想成对数据库进行写操作,在此我们可以用perl的queue 的方法是多线程分别往队列中添加数据,一个线程负责写入数据库,这样可以提升效率。

#!/usr/bin/perl

use threads;
use Thread::Queue; my $q = Thread::Queue->new(); sub produce {
my $name = shift;
for(my $i=;$i<;$i++) {
my $r = $i;
$q->enqueue($r);
printf("$name $r\n");
sleep();
}
} sub consume {
sleep();
my $name = shift;
while() {
my $r = $q->dequeue();# 此处可以插入数据 但是要主要注意的是 数据库要从此线程中打开
printf("consume $r\n");
}
} my $producer1 = threads->create(\&produce, "producer1");
my $producer2 = threads->create(\&produce, "producer2");
my $consumer1 = threads->create(\&consume, "consumer2"); $producer1->join();
$producer2->join();
$consumer1->join(); print "sdfsdfdsf";

3.如果采用detach 的方式开启线程 有可能会出现一种情况  就是  主线程会在子线程前结束,这样会终止 子线程的运行,所以要控制主线程的结束时间 一种就是通过延时将 主线程等待子线程的结束 才结束,最好的方法采用信号量的方式告诉主线程结束


#!/usr/bin/perl
use threads;
use Thread::Semaphore;
my $j=;
my $thread;my $max_threads=;
my $semaphore=new Thread::Semaphore($max_threads); print localtime(time),"\n";
while()
{ if($j>)
{
print "last";
last; } $j=$j+;
#获得一个信号量;当执行的线程数为5时,获取失败,主线程等待。直到有一个线程结束,新的信号量可用。回复正常运行;
$semaphore->down();
print $j,"\n";
my $thread=threads->new(\&ss,$j,$j); #创建线程;
$thread->detach(); #剥离线程;
} &waitquit; print localtime(time),"\n"; sub ss()
{ my ($t,$s)=@_;
sleep($t);
print "$s\t",scalar(threads->list()),"\t$j\t",localtime(time),"\n";
$semaphore->up(); #当线程执行完成时,释放信号量。
} sub waitquit
{ print "Waiting to quit...\n";
my $num=;
while($num<$max_thread)
{ $semaphore->down();
$num++;
print "$num thread quit...\n";
}
print "All $max_thread thread quit\n";
}

运行的结果:

35410201111953530
1
2
3
1 0 1 45410201111953530
4
2 0 2 55410201111953530
5
3 0 3 65410201111953530
6
4 0 4 85410201111953530
7
5 0 5 105410201111953530
8
6 0 6 125410201111953530
9
7 0 7 155410201111953530
10
8 0 8 185410201111953530
11
lastWaiting to quit...
All thread quit
185410201111953530

perl语言的线程使用的更多相关文章

  1. Perl语言

    Perl是高级.通用.直译式.动态的程序语言家族.最初设计者拉里·沃尔(Larry Wall)为了让在UNIX上进行报表处理的工作变得更方便,决定开发一个通用的脚本语言,而在1987年12月18日发表 ...

  2. Perl语言——简单说明

    Perl语言——简单说明 一.简单说明 Perl语言全称:实用摘录与报表语言|病态折中式垃圾列表器.Perl名称并不是缩写词,而是个溯写字. Perl语言历史:Larry Wall(拉里·沃尔)20世 ...

  3. perl语言书籍教程推荐

    互动出版网计算机频道.为您推荐关于perl语言的书籍教程.包括perl push.perl chomp以及perl python等perl语言内容. perl语言书籍一.<Perl语言编程 第四 ...

  4. 边看MHA源码边学Perl语言之一开篇

    边看MHA源码边学Perl语言之一开篇 自我简介 先简单介绍一下自己,到目前为此我已经做了7年左右的JAVA和3年左右php开发与管理,做java时主要开发物流行业的相关软件,对台湾快递,国际快递,国 ...

  5. Perl语言入门

    Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 "实用报表提取语言". Perl语法基础: (1)Perl程序由声 ...

  6. c++11 语言级线程

    c++11 语言级线程 线程的创建 用std::thread创建线程非常简单,只需要提供线程函数或函数对象即可,并且可以同时指定线程函数的参数. #define _CRT_SECURE_NO_WARN ...

  7. Perl语言入门: 斜线不是元字符,所以在不作为分隔符时不需要加上反斜线。

    Perl语言入门: 斜线不是元字符,所以在不作为分隔符时不需要加上反斜线.

  8. [转帖]rename(Perl语言版本) 详解

    rename(Perl语言版本) 详解 2019-03-19 22:51:23 wayne17 阅读数 464更多 分类专栏: Ubuntu之路   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  9. C语言实现线程池功能

    1. 线程池基本原理 2. 线程池C语言实现 2.1 线程池的数据结构 #include <stdio.h> #include <pthread.h> #include < ...

随机推荐

  1. 运行时给java对象动态的属性赋值

    运行时给java对象动态的属性赋值 如何给java对象动态的属性赋值(也就是在代码执行的时候才决定给哪个属性赋值)         1.自定义一个工具类ReflectHelper,代码如下所示: pa ...

  2. Python的Asyncore异步Socket模块及实现端口转发的例子

    Python的Asyncore异步Socket模块及实现端口转发的例子 Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构. 只有两种方式使一个程序在单处理器上实现" ...

  3. CentOS7.2配置LNMP环境并安装配置网站WordPress

    1,安装环境查看 2,安装MySQL5.7.22 下载MySQL wget https://downloads.mysql.com/archives/get/file/mysql-5.7.22-1.e ...

  4. 高级UI-符合MD的常用控件

    在Google提供的控件中,在support-design及v4,v7包中,存在着很多符合MD标准的控件,这里罗列出一些常用的控件 TextInputLayout 这个控件在作为输入框的时候是极其方便 ...

  5. Redis List集合 使用

    列表类型(list)用于存储一个有序的字符串列表,常用的操作是向队列两端添加元素或者获得列表的某一片段.列表内部使用的是双向链表(double linked list)实现的,所以向列表两端添加元素的 ...

  6. CentOS系统安装配置mysql

    一.mysql安装 安装mysql数据库: yum install -y mysql mysql-server 判断mysql是否启动成功: service mysqld start 二.mysql配 ...

  7. vue中添加less配置,用于计算div高度

    需求:左边垂直的菜单栏高度设置为 100% - 导航栏的高度(3.6rem) 首先,从vue-cli脚手架里的安装的webpack模板中并没有less的依赖配置,得自己手动添加安装 安装命令::npm ...

  8. css中盒子模型与box-sizing属性

    盒子模型 w3c标准:定义的width为 内容,有padding,border 都会使得 最终呈现的宽度为 定义的width+padding+border的总和,有margin另加 ie标准:定义的w ...

  9. python数据结构_递归_汉诺塔问题

    已经不是第一次写这个汉诺塔问题, 其实递归还真是不太好理解, 因为递归这种是想其实有点反人类, 为什么? 因为不太清楚, 写个循环一目了然, 用递归其实要把核心逻辑理清楚, 要不根本没法进行下去 所有 ...

  10. C语言各数据类型大小和取值范围