随着计算机技术的不断发展,多线程编程技术逐渐被广泛应用到各个领域,也成为了很多程序员研究的焦点。本文将从介绍多线程概念入手,逐步展开介绍的相关知识点。
一、多线程编程概念
多线程技术是指在一个程序中同时运行多个线程,每个线程都可以完成一个独立的任务。多线程技术可以提高程序的运行效率,缩短程序的执行时间。多线程技术的主要优点包括提高程序的并发性、简化程序的管理和维护、提高程序的运行效率等。
多线程技术的实现方法包括线程库和线程实现。线程库是一组用于管理线程的函数和数据结构,而线程实现则是指操作系统提供的线程实现方式。同时,多线程技术的实现需要注意线程的同步和互斥,以保证线程间的协作和数据的一致性。
二、Shell脚本多线程编程
Shell脚本多线程编程是指在Shell脚本中实现多线程技术,实现Shell脚本程序的并发执行。Shell脚本多线程编程可以提高程序的执行效率,缩短程序的执行时间。同时,Shell脚本多线程编程可以实现复杂的任务管理和协作机制,提高程序的可靠性。
Shell脚本多线程编程的主要实现方法包括使用Thread命令和使用Fork/Exec组合方法。Thread命令是Shell脚本自带的多线程命令,使用Thread命令可以方便地创建和管理线程;Fork/Exec组合方法则是通过创建子进程的方式实现多线程技术。
1. Thread命令
使用Thread命令创建线程的语法如下:
Thread -n [线程数] -s [线程启动命令]
其中,-n参数指定线程的数量,-s参数指定线程的启动命令。
例如,下面的代码使用Thread命令创建两个线程,分别执行ls命令和ps命令:
“`shell
Thread -n 2 -s “ls &” “ps &”
“`
2. Fork/Exec组合方法
Fork/Exec组合方法是通过创建子进程的方式实现多线程技术。使用这种方法需要使用Shell脚本中的Fork命令和Exec命令。
Fork命令可以创建一个子进程,并返回子进程的进程ID。Exec命令可以在一个进程中运行另一个程序。
例如,下面的代码使用Fork/Exec组合方法创建两个子进程,分别执行ls命令和ps命令:
“`shell
#!/bin/sh
for i in $(seq 1 2)
do
{
echo “子进程$i开始执行”
Fork
if [ $retval = 0 ]
then
# 在子进程中执行ls/pstree命令
case $i in
1)
Exec ls
;;
2)
Exec ps -ef
;;
esac
echo “子进程$i执行完毕”
exit 0
else
# 在父进程中等待子进程执行完毕
wt $retval
fi
} &
done
wt
echo “程序执行完毕”
“`
三、Shell脚本多线程编程中的实践案例
下面通过一个实践案例来说明Shell脚本多线程编程的具体实现方法。
实践案例:设计一个Shell脚本程序,实现多线程下载器的功能。
1. 程序设计思路
本程序使用Shell脚本实现多线程下载器的功能,通过分别创建多个线程下载文件块,最终合并成完整的文件实现下载功能。
程序的使用方法为:
“`shell
./download.sh [文件URL] [保存路径] [下载线程数]
“`
其中,文件URL指定需要下载的文件地址;保存路径指定文件保存的路径;下载线程数指定程序的下载线程数量。
程序的执行流程为:
1. 读取程序参数,并创建进程锁、进程信号量。
2. 获取文件信息,并计算出每个线程需要下载的文件块的大小。
3. 创建多个下载线程,并在每个线程中下载对应的文件块。
4. 合并下载所有的文件块,生成完整的文件。
2. 程序实现
下面是程序具体的实现方法:
“`shell
#!/bin/bash
# 多线程下载器
# 读取程序参数
url=$1 # 文件地址
path=$2 # 下载路径
threads=$3 # 下载线程数
# 创建进程锁、进程信号量
lock=`mktemp`
semaphore=`mktemp`
mkfifo $lock
mkfifo $semaphore
exec 4$lock
exec 6$semaphore
rm -rf $lock
rm -rf $semaphore
for (( i=0; i
do
echo >&4
done
for (( i=0; i
do
echo >&6
done
# 获取文件信息,计算出每个线程需要下载的文件块的大小
tempfile=`mktemp`
curl -sI $url > $tempfile
filelength=`cat $tempfile | grep “Content-Length:” | awk ‘{print $2}’`
filesize=`expr $filelength / $threads`
filesize=`expr $filesize / 1024`
for (( i=0; i
do
start=`expr $i \* $filesize \* 1024`
end=`expr $start + $filesize \* 1024`
echo “线程$i:下载范围[$start, $end)”
done
# 创建多个下载线程,并在每个线程中下载对应的文件块
echo “开始下载文件…”
for (( i=0; i
do
{
read -u6
# 下载文件块
tempfile=`mktemp`
start=`expr $i \* $filesize \* 1024`
end=`expr $start + $filesize \* 1024`
curl –range $start-$end $url -o ${path}/${i}.part >$tempfile 2>&1
if [ $? -ne 0 ]
then
echo “线程$i:下载文件块失败”
echo >&6
echo >&4
exit 1
fi
echo “线程$i:下载文件块成功 [$start, $end)”
echo >&6
echo >&4
} &
done
# 等待所有线程执行完毕
wt
# 合并所有下载的文件块
echo “开始合并文件…”
cat ${path}/*.part > ${path}/output
mv $tempfile ${path}/download.log
echo “下载完成”
“`
四、
Linux脚本多线程编程是一项复杂而又有趣的编程技术,通过多线程编程可以实现复杂的任务管理和协作机制,提高程序的可靠性。Shell脚本多线程编程是Linux系统中实现多线程程序的一种常见方法,通过使用Thread命令和Fork/Exec组合方法可以实现多线程编程。在实践中,需要注意线程的同步和互斥问题,以保证线程间的协作和数据的一致性。
相关问题拓展阅读:
- python是学什么的?
- 大数据行业挺火的,苦X已工作工科硕士如何转行大数据
python是学什么的?
Python相对来说挺好入门的,不过也不要掉以轻心,学习的时候还是应该认真努力,学习内容整理如下锋清姿:
Python语言基础:主要学习Python基础知识,如Python3、数据类型、字符串、函数、类、文件操作等。
Python语言高级:主要学习Python库、正则表达式、进程线程、爬虫、遍历以及MySQL数据库。
Python web开发:主要学习HTML、CSS、JavaScript、jQuery等前端知识,掌握python三大后端框架(Django、 Flask以及Tornado)。
Linux基础:主要学习Linux相关的各种命令,如文件处理命令、压缩解压命令、权限管理以及Linux Shell开发等。
Linux运维自动化开发:主要学习Python开发Linux运维、Linux运维报警工具开发、正燃Linux运维报警安全审计开发、Linux业务质量报表工具开发、Kali安全检测工具检测以及Kali 密码破解实战。
Python爬虫:主要学习python爬虫技术,掌握多线程爬虫技术,分布式爬虫技术。
Python数据分析和大数据:主要学习numpy数据处理、pandas数据分析、matplotlib数据可视化、scipy数银绝据统计分析以及python 金融数据分析;Hadoop HDFS、python Hadoop MapReduce、python Spark core、python Spark SQL以及python Spark MLlib。
Python机器学习:主要学习KNN算法、线性回归、逻辑斯蒂回归算法、决策树算法、朴素贝叶斯算法、支持向量机以及聚类k-means算法。
学习python主要有自学和报班学习两种方式。
具体学的顺序如下:
①Python软件开发基础
掌握计算机的构成和工作原理
会使用Linux常用工具
熟练使用Docker的基本命令
建立Python开发环境,并使用print输出
使用Python完成
字符串
的各种操作
使用Python re模块进行程序设计
使用Python创建文件、访问、删除文件
掌握import 语句、From…import 语句、From…import* 语句、方法的引用、Python中的包
②Python软件开发进阶
能够使用Python面向对象方法
开发软件
能够自己建立数据库,表,并进行基本数据库操作
掌握非关系数据库MongoDB的使用,掌握Redis开发
能够独立完成TCP/UDP服务端客户端软件开发,能够实现ftp、http服务器,开发邮件软件
能开发多进程、
多线程
软件
③Python全栈式WEB工程师
能够独立完成后端软件开发,深入理解Python开发后端的精髓
能亏逗派够独立完成前端软件开发,并和后端结合,熟练掌握使用Python进行全站Web开发的技巧
④Python多领域开发
能够使用Python熟练编写爬虫软件
能够熟练使用Python库进行
数据分析
招聘网站Python招聘职位数据爬取分析
掌握使用Python开源人工智能框架进行人工智能软件开发、
语音识别
、人脸识别
掌握基本
设计模式
、常用算法
掌握
软件工程
、项目管理、项目文档、
软件测试
调优的基本方法
Python目前是比较火,学习之后可以从事软件开发、
数据挖掘
等工作,发展前景非常好,普通人也可以学习。
想要系统学习,你可以考察对比一下开设有IT专业的热门学校,好的学校指段拥有根据当下企业需求自主研发课程的能力,建议实地考察对比一下。
祝你学有所成销贺,望采纳。
请点击输入图片描述
这是Python全栈开发+人工智能课程大纲:
阶段一:Python开发基础
Python全栈开发与人工智能之Python开发基础知识学习内容包括:Python基础语法、数据类型、字符编码、文件操作、函数、装饰器、迭代器、内置方法、常用模块等。
阶段或搏银二:Python高级编程和数据库开发
Python全栈开发与人工智能之Python高级编程和数据库开发知识学习内容包括:面向对象开发、Socket网络编程、线程、进程、队列、IO多路模型、Mysql数据库开发等。
阶段三:前端开发
Python全栈开发与人工智能之前端开发知识学习内容包括:Html、CSS、JavaScript开发、Jquery&bootstrap开发、前端框架VUE开发等。
阶段四:WEB框架开发
Python全栈开发与人工智能之WEB框架开发学习内容包括:Django框架基础、Django框架进阶、BBS+Blog实战项目开发、缓存和队列中间件、Flask框架学习、Tornado框架学习、Restful API等。
阶段五:爬虫开发
Python全栈开发与人工智能之爬银模虫开发学习内容包括:爬虫开发实战。
阶段六:全栈项目实战
Python全栈开发与人工智能之全栈项目实战学习内容包括:企业应用工具学习、CRM客户关衫宴系管理系统开发、路飞学城在线教育平台开发等。
阶段七:数据分析
Python全栈开发与人工智能之数据分析学习内容包括:金融量化分析。
阶段八:人工智能
Python全栈开发与人工智能之人工智能学习内容包括:机器学习、数据分析 、图像识别、自然语言翻译等。
阶段九:自动化运维&开发
Python全栈开发与人工智能之自动化运维&开发学习内容包括:CMDB资产管理系统开发、IT审计+主机管理系统开发、分布式主机监控系统开发等。
阶段十:高并发语言GO开发
Python全栈开发与人工智能之高并发语言GO开发学习内容包括:GO语言基础、数据类型与文件IO操作、函数和面向对象、并发编程等。
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独信正立的、手裤大型毕坦简项目的开发。
1、Python基础与Linux数据库
技能达标要求:掌握Python基础语法,具备基础的编程能力;掌握Linux基本操作命令,掌握MySQL进阶内容。知识点包括Python基本语法规则及变量、逻辑控制、内置数据结构、文件操作、高级函数、模块、Python常用标准库模块、函数、异常陵此处简迅理、MySQL使用、协程等
2、WEB全栈
技能达标要求:掌握WEB前端技术内容,掌握WEB后端框架,熟练使用Flask、Tornado、Django。涉及的知识点有HTML、CSS、JavaScript、jQuery、BootStrap、Web开发基础、VUE、Flask Views、Flask模板、数据库操作、Flask配置等。
3、数据分析+人工智能
技能达标要求:掌握爬虫、数据采集、数据机构与算法,掌握人工智能技术。涉及的知识点有数据抓取、数据提取、数据存储、爬虫并发、动态网页抓尺咐迅取、scrapy框架、分布式爬虫、爬虫攻防、数据结构、算法等。
4、高级进阶
技能达标要求:掌握自动化运维与区块链开发技术,具备自动化运维项目以及区块链项目经验。涉及的知识点有项目开发流程、部署、高并发、性能调优、Go语言基础、区块链入门等。
大数据行业挺火的,苦X已工作工科硕士如何转行大数据
硕士研究生可分为普通硕士和专业硕士两类。 【普通硕士】 根据我国的有陵斗关知伍规定,普通硕士教育以培养教学和科研人才为主,授予学位的类型主要是学术型学位尺猛磨。 目前,我国学术型学位按招生学科门类分为12大类,12大类下面再分为88个一级学科
转行这个词汇,一直是职场上此起彼伏的一个热门话题,相信很多朋友都想过或已经经历过转行。工作可谓是我们生存乃至生活的主要收入来源,谁都希望拥有一份高薪又稳定的工作,以此来改善自己的生活和实现自己的大大小小的梦想!但又担心转行后的工作待遇达不到自己的预期,顾虑重重……
不少想进入大数据分析行业的零基础学员经常会有这样一些疑问:大数据分析零基础应该怎么学习?自己适合学习大数据分析吗?人生,就是在不断地做选择,然后在这个选择过哗蠢程中成长,让自己从一棵小树苗变成参天大树。就是我们每个对大数据充满幻想终于下定决心行动的学员的选择,我们给了自己4个月的时间,想要在大数据分乱烂陪析这个领域汲取养分,让自己壮大成长。
【明确方向】
通过国家的战略规划,看到BAT的大牛们都在大数据行业布局,新闻媒体追捧这大数据分析行业的项目和热点,我想如果我还没有能力独立判断的时候,跟着国家政策和互联网大佬们的步调走,这应该是错不了的。
【付诸行动】
明确了方向之后,我就整装待发,刚开始是在网络上购买了很多的视频教程,也买了很多书籍,但是更大的问题就在于,我不知道怎么入手,没关系,有信心有耐心肯定能战胜困难,我坚持了一个月,学习的节奏越来越乱,陆陆续续出现了很多的问题,没人指导,请教了几个业内的朋友,但对方工作繁忙,问了几次之后就不好意思了,自学陷入了死循环。
意识到我学习效率的低下,以及无人指导的问题想想未来的康庄大道,咬咬牙告诉自己,一定好好好学,不然就浪费太多时间最后还会是一无所获。最后找到组织(AAA教育)一起学习进步!
大数据分析零基础学习路线,有信心能坚持学习的话,那就当下开始行动吧!
一、大数据技术基础
1、linux操作基础
linux系统简介与安装
linux常用命令–文件操作
linux常用命令–用户管理与权限
linux常用命令–系统管理
linux常用命令–免密登陆配置与网络管理
linux上常用软件安装
linux本地yum源配置及yum软件安装
linux防火墙配置
linux高级文本处理命令cut、sed、awk
linux定时任务crontab
2、shell编程
shell编程–基本语法
shell编程–流程控制
shell编程–函数
shell编程–综合案例–自动化部署脚本
3、内存数据库redis
redis和nosql简介
redis客户端连接
redis的string类型数据结构操作及应用-对象缓存
redis的list类型数据结构操作及应用案例-任务调度队列
redis的hash及set数据结构操作及应用案例-购物车
redis的sortedset数据结构操作及应用案例-排行榜
4、布式协调服务zookeeper
zookeeper简介及应用场景
zookeeper集群安装部署
zookeeper的数据节点与命令行操作
zookeeper的java客户端基本操作及事件监听
zookeeper核心机制及数据节点
zookeeper应用案例–分布式共享资源锁
zookeeper应用案例–服务器上下线动态感知
zookeeper的数据一致性原理及leader选举机制
5、java高级特性增强
Java多线程基本知识
Java同步关键词详解
java并发包线程池及在开源软件中的应用
Java并发包消息队里及在开源软件中的应用
Java JMS技术
Java动态代理反射
6、轻量级RPC框架开发
RPC原理学习
Nio原理学习
Netty常用API学习
轻量级RPC框架需求分析及原理分析
轻历丛量级RPC框架开发
二、离线计算系统
1、hadoop快速入门
hadoop背景介绍
分布式系统概述
离线数据分析流程介绍
集群搭建
集群使用初步
2、HDFS增强
HDFS的概念和特性
HDFS的shell(命令行客户端)操作
HDFS的工作机制
NAMENODE的工作机制
java的api操作
案例1:开发shell采集脚本
3、MAPREDUCE详解
自定义hadoop的RPC框架
Mapreduce编程规范及示例编写
Mapreduce程序运行模式及debug方法
mapreduce程序运行模式的内在机理
mapreduce运算框架的主体工作流程
自定义对象的序列化方法
MapReduce编程案例
4、MAPREDUCE增强
Mapreduce排序
自定义partitioner
Mapreduce的combiner
mapreduce工作机制详解
5、MAPREDUCE实战
maptask并行度机制-文件切片
maptask并行度设置
倒排索引
共同好友
6、federation介绍和hive使用
Hadoop的HA机制
HA集群的安装部署
集群运维测试之Datanode动态上下线
集群运维测试之Namenode状态切换管理
集群运维测试之数据块的balance
HA下HDFS-API变化
hive简介
hive架构
hive安装部署
hvie初使用
7、hive增强和flume介绍
HQL-DDL基本语法
HQL-DML基本语法
HIVE的join
HIVE 参数配置
HIVE 自定义函数和Transform
HIVE 执行HQL的实例分析
HIVE更佳实践注意点
HIVE优化策略
HIVE实战案例
Flume介绍
Flume的安装部署
案例:采集目录到HDFS
案例:采集文件到HDFS
三、流式计算
1、Storm从入门到精通
Storm是什么
Storm架构分析
Storm架构分析
Storm编程模型、Tuple源码、并发度分析
Storm WordCount案例及常用Api分析
Storm集群部署实战
Storm+Kafka+Redis业务指标计算
Storm源码下载编译
Strom集群启动及源码分析
Storm任务提交及源码分析
Storm数据发送流程分析
Storm通信机制分析
Storm消息容错机制及源码分析
Storm多stream项目分析
编写自己的流式任务执行框架
2、Storm上下游及架构集成
消息队列是什么
Kakfa核心组件
Kafka集群部署实战及常用命令
Kafka配置文件梳理
Kakfa JavaApi学习
Kafka文件存储机制分析
Redis基础及单机环境部署
Redis数据结构及典型案例
Flume快速入门
Flume+Kafka+Storm+Redis整合
四、内存计算体系Spark
1、scala编程
scala编程介绍
scala相关软件安装
scala基础语法
scala方法和函数
scala函数式编程特点
scala数组和
scala编程练习(单机版WordCount)
scala面向对象
scala模式匹配
actor编程介绍
option和偏函数
实战:actor的并发WordCount
柯里化
隐式转换
2、AKKA与RPC
Akka并发编程框架
实战:RPC编程实战
3、Spark快速入门
spark介绍
spark环境搭建
RDD简介
RDD的转换和动作
实战:RDD综合练习
RDD高级算子
自定义Partitioner
实战:网站访问次数
广播变量
实战:根据IP计算归属地
自定义排序
利用JDBC RDD实现数据导入导出
WorldCount执行流程详解
4、RDD详解
RDD依赖关系
RDD缓存机制
RDD的Checkpoint检查点机制
Spark任务执行过程分析
RDD的Stage划分
5、Spark-Sql应用
Spark-SQL
Spark结合Hive
DataFrame
实战:Spark-SQL和DataFrame案例
6、SparkStreaming应用实战
Spark-Streaming简介
Spark-Streaming编程
实战:StageFulWordCount
Flume结合Spark Streaming
Kafka结合Spark Streaming
窗口函数
ELK技术栈介绍
ElasticSearch安装和使用
Storm架构分析
Storm编程模型、Tuple源码、并发度分析
Storm WordCount案例及常用Api分析
7、Spark核心源码解析
Spark源码编译
Spark远程debug
Spark任务提交行流程源码分析
Spark通信流程源码分析
SparkContext创建过程源码分析
DriverActor和ClientActor通信过程源码分析
Worker启动Executor过程源码分析
Executor向DriverActor注册过程源码分析
Executor向Driver注册过程源码分析
DAGScheduler和TaskScheduler源码分析
Shuffle过程源码分析
Task执行过程源码分析
五、机器学习算法
1、python及numpy库
机器学习简介
机器学习与python
python语言–快速入门
python语言–数据类型详解
python语言–流程控制语句
python语言–函数使用
python语言–模块和包
phthon语言–面向对象
python机器学习算法库–numpy
机器学习必备数学知识–概率论
2、常用算法实现
knn分类算法–算法原理
knn分类算法–代码实现
knn分类算法–手写字识别案例
lineage回归分类算法–算法原理
lineage回归分类算法–算法实现及demo
朴素贝叶斯分类算法–算法原理
朴素贝叶斯分类算法–算法实现
朴素贝叶斯分类算法–垃圾邮件识别应用案例
kmeans聚类算法–算法原理
kmeans聚类算法–算法实现
kmeans聚类算法–地理位置聚类应用
决策树分类算法–算法原理
决策树分类算法–算法实现
时下的大数据分析时代与人工智能热潮,相信有许多对大数据分析师非常感兴趣、跃跃欲试想着转行的朋友,但面向整个社会,最不缺的其实就是人才,对于是否转行大数据分析行列,对于能否勇敢一次跳出自己的舒适圈,不少人还是踌躇满志啊!毕竟好多决定,一旦做出了就很难再回头了。不过如果你已经转行到大数据分析领域,就不要后悔,做到如何脱颖而出才是关键。因此本文给出一些建议,针对想要转行大数据分析行列且是零基础转行的小伙伴们,希望对你们有所裨益,也希望你们将来学有所成,不后悔,更不灰心!
相关推荐:
《
转行大数据分析师后悔了
》、《
ui设计培训四个月骗局大爆料
》、《
零基础学大数据分析现实吗
》、《
大数据分析十八般工具
》、《
大数据分析流程是什么
》、《
大数据分析12大就业方向
》
多线程编程 linux脚本的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于多线程编程 linux脚本,Linux脚本多线程编程实现,python是学什么的?,大数据行业挺火的,苦X已工作工科硕士如何转行大数据的信息别忘了在本站进行查找喔。