脚本---多线程与胶水语言

一、线程

线程:程序单一执行点的控制流,是进程的一部分,每个进程含有至少一个线程。
多线程程序模型
在这里插入图片描述

二、Perl多线程与胶水语言

(一)Perl中的线程

Perl 中的数据默认不能在线程中被分享,因 此Perl模块有很好的线程安全性或者很容易被做成线程安全的。
可使用threads::shared包来实现数据共享。
但并非所有的模块都是线程安全的,因此应该假设模块是不安全的,除非文档说明了, 否则应该进行代码测试。

1.如何获取所使用的的perl版本支持的线程模型?
方法一:从shell直接查看

perl -v | grep use.*threads

(二)Perl中多线程的实现

线程的生命周期:创建、运行、退出

1.创建线程

threads模块提供了创建线程的工具,create/async

#!/usr/bin/perl
use threads;
my $Param3='foo';
my $thr1=threads->create(\&sub1,'Param 1','Param 2',$Param3);

my @ParamList=(42,'Hello',3.14);
my $thr2=threads->create(\&sub1,@ParamList);

my $thr3=threads->create(\&sub1,qw(Param1 Param2 Param3));

sub sub1{
	my @In=@_;
	print("In the thread\n");
	print('Got parameters >',join('<>',@In),"<\n");
}

在这里插入图片描述

2.回收

线程为子程序,可以返回值,使用join回收;若没有返回值则用detach回收
在这里插入图片描述
在这里插入图片描述

3.线程终止

dieexit

要等所有线程执行完毕后,除非是需要提前结束;
所有能够结束进程的方法都可以结束所有运行的线程。
在这里插入图片描述

4.同步和控制

通过lock函数对分享的变量加锁(也可以在数组或哈希表上使用锁机制),当一个线程锁定了变量,其它线程不可以锁定该变量,直到该线程解锁该变量。锁机制不是锁住对数据的访问而是锁住访问的企图

当锁定的线程运行离开包含lock的语句块时自动解锁。

在这里插入图片描述

锁是递归的(recursive),一个线程可以多次锁定一个变量,锁将持续到最外层的锁的作用域

死锁:假如一个线程对某一个共享变量实施了锁操作,在它没有释放锁之 前,如果另外一个线程也对这个共享变量实施锁操作,那么这个线程就会被阻塞,阻塞不会被自动中止而是直到前一个线程将锁释放为止,这样的模式就是死锁。

5.线程实用技巧

5.1队列:一种线程安全的对象,用于将数据从一端放进去,从另一端取出来,不用担心数据同步问题。
在这里插入图片描述
5.2信号:
5.2.1信号基本应用
在这里插入图片描述

5.2.2

(三)Perl胶水语言

1.Perl与Unix

systemexec
在这里插入图片描述

2.Perl与Wins

反引号``
在这里插入图片描述

3.Perl与C
4.Perl与Java
5.Perl与R
6.Perl与Python

三、Python多线程与胶水语言

(一)Python中的线程

Python中常用线程模块: _thread、threading(推荐使用)
Python中使用线程有两种方式:函数或者用类来包装线程对象。

1.函数式

调用 _thread 模块中的start_new_thread()函数来产生新线程。
在这里插入图片描述

2.继承创建一个新的子类

直接从 threading.Thread 继承创建一个新的子类,并实例化后调用 start() 方法启动新线程。

(二)线程同步

当线程需要共享数据时,可能存在数据不同步的问题。
为了避免这种情况,引入了锁的概念,锁有两种状态——锁定和未锁定。

1.锁

使用 Thread 对象的 Lock 和 Rlock 可以实现简单的线程同步。

这两个对象都有 acquire 方法和 release 方法,对于那些需要每次只允许一个线程操作的数据,可以将其操作放到acquirerelease 方法之间。

在这里插入图片描述
在这里插入图片描述

2.线程优先级队列

Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列 PriorityQueue。
在这里插入图片描述
在这里插入图片描述

(三)Python胶水语言

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
嗨!很高兴回答你关于Python游戏脚本入门的问题。在Python中,多线程是一种并发处理的技术,它允许程序同时执行多个线程,从而提高程序的运行效率和响应能力。在游戏开发中,多线程可以用于处理游戏中的多个任务或实现并行计算。 要在Python中使用多线程,可以使用内置的`threading`模块。下面是一个简单的示例,演示如何在Python中创建和启动多个线程: ```python import threading def task(): # 这里是线程要执行的任务 print("Hello, I'm running in a thread!") # 创建线程对象 thread1 = threading.Thread(target=task) thread2 = threading.Thread(target=task) # 启动线程 thread1.start() thread2.start() ``` 在上面的示例中,我们首先定义了一个`task`函数,这是线程要执行的具体任务。然后,我们使用`threading.Thread`类创建了两个线程对象`thread1`和`thread2`,并将`task`函数作为参数传递给它们。最后,我们调用`start`方法来启动这两个线程。 多线程的执行是并发的,所以你可能会看到输出信息交替出现。在实际的游戏开发中,你可以利用多线程来处理不同的游戏逻辑、计算复杂的物理模拟或者处理网络通信等任务,从而提升游戏的性能和玩家体验。 但是需要注意的是,多线程编程需要注意线程之间的同步和资源竞争问题。在游戏开发中,你可能需要使用锁和同步原语来确保线程之间的安全操作。 希望这个简单的介绍对你有所帮助!如果你有任何其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值