参考的教程链接是

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. 123457123456#0#-----com.threeapp.MakerHanBao01----儿童汉堡制作游戏

    ----com.threeapp.MakerHanBao01----儿童汉堡制作游戏

  2. CentOS 端口和防火墙操作

    Centos 7 端口和防火墙命令: 查看已经开放的端口:firewall-cmd --list-ports 开启端口:firewall-cmd --zone=public --add-port=80 ...

  3. (四)UML之顺序图(时序图)

    一.概念 顺序图是交互图的一种形式,它显示对象沿生命线发展,对象之间随时间的交互表示为从源生命线指向目标生命线的消息.顺序图能很好地显示那些对象与其它那些对象通信,什么消息触发了这些通信,顺序图不能很 ...

  4. 【搬运】NumPy_for_Matlab_Users

    搬运自:http://scipy.github.io/old-wiki/pages/NumPy_for_Matlab_Users.html. 1.Introduction MATLAB和NumPy/S ...

  5. 高级UI-RecyclerView简单使用

    RecyclerView从Android 5.0开始引入,用以替代ListView.GridView控件,RecyclerView的存在,使得控件的耦合度更低,在ListView中需要使用ViewHo ...

  6. Ie浏览器请求400错误,谷歌火狐等浏览器正常请求.

    做项目的时候,遇到一个小的问题.一个location.href="请求的url"在其它浏览器上是可以正常请求的.但是在ie浏览器上确出现奇怪的http请求400错误,我们先来对于h ...

  7. Centos安装Python3及设置对应版本pip

    安装Python3 安装Python依赖: yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...

  8. 日常工作问题解决:redhat6.9--解决yum功能不能正常使用和配置yum源

    1.问题描述 解决RedHat6.9下yum功能不能用问题: 在redhat6.9下使用yum安装时,会提示:This system is not registered to Red Hat Subs ...

  9. 《Mysql - 字符串索引应该如何建立?》

    一:概述 - 我有一个需求是需要邮箱登录的, - mysql> select f1, f2 from SUser where email='xxx'; - 我们知道,如果不在 email 上建立 ...

  10. iOS开发支付篇——内购(IAP)详解

    1 <em>内购所需要的资料整理总结,史上最完整的,哈哈哈哈哈哈</em> 思维导图 重点总结: 1 2 3 4 5 6 7 8 9 10 11 12 13 1.获取内购列表( ...