- 博客(160)
- 资源 (3)
- 收藏
- 关注
原创 代码随想录 - 链表
链表是一种通过指针串联的线性结构,每一个节点由两部分组成,一个是数据域一个是指针域(存放指向下一个节点的指针),最后一个节点的指针域指向null(空指针的意思)。
2023-08-11 11:21:07
361
原创 使用Anaconda3创建pytorch虚拟环境
其中-c pytorch中的c表示channel,即下载渠道,是国外的渠道,所以很有可能会出现安装非常缓慢的情况。利用nvidia-smi命令查找的本机CUDA版本,可以对应在PyTorch这里查找安装对应型号的pytorch包的命令。其中base为Anaconda的默认环境,mypytorch是之前搭建的环境,my2pytorch就是现在搭建出来的pytorch环境。下载完成后,可以在pytorch环境下,同上述输入conda list命令查看安装好包后的所有包的列表。必须要在pytorch环境中输入!
2023-07-26 15:32:04
6181
2
原创 基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)
基于Centos 7虚拟机的磁盘操作(添加磁盘、分区、格式分区、挂载)
2023-07-25 09:54:51
11434
1
原创 本地套接字(domain)
本地套接字是一种特殊类型的套接字,和 TCP/UDP 套接字不同。TCP/UDP 即使在本地地址通信,也要走系统网络协议栈,而本地套接字,严格意义上说提供了一种单主机跨进程间调用的手段,减少了协议栈实现的复杂度,效率比 TCP/UDP 套接字都要高许多。本地套接字是 IPC,也就是本地进程间通信的一种实现方式。
2023-04-20 10:56:13
1440
原创 TCP和UDP通信对比
TCP: 传输控制协议 安全可靠 丢包重传 面向连接(电话模型) UDP: 用户数据报协议 不安全不可靠 丢包不重传 快 不面向连接(邮件模型)
2023-04-19 10:19:08
635
原创 线程池技术
线程池(thread pool)技术是指能够保证所创建的任一线程都处于繁忙状态,而不需要频繁地为了某一任务而创建和销毁线程,因为系统在创建和销毁线程时所耗费的cpu资源很大。如果任务很多,频率很高,为了单一一个任务而起线程而后销线程,那么这种情况效率相当低下的。线程池技术就是用于解决这样一种应用场景而应运而生的。
2023-04-16 22:11:29
616
原创 epoll进阶
epoll除了提供select/poll那种IO事件的电平触发(Level Triggered)外,还提供了边沿触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。
2023-04-13 21:09:21
535
原创 多路I/O转接 poll(了解)
poll() 的机制与 select() 类似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有最大文件描述符数量的限制(但是数量过大后性能也是会下降)。
2023-04-13 15:14:21
733
原创 多路I/O转接服务器
多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。
2023-04-09 16:13:35
639
原创 错误处理函数(补充:Socket编程)
Socket编程的例子不仅功能简单,而且简单到几乎没有什么错误处理,我们知道,系统调用不能保证每次都成功,必须进行出错处理,这样一方面可以保证程序逻辑正常,另一方面可以迅速得到故障信息。:光标放在函数名称处,vim命令模式下输入2K。
2023-04-08 15:27:16
141
原创 信号量
由于互斥锁的粒度比较大,如果我们希望在多个线程间对某一对象的部分数据进行共享,使用互斥锁是没有办法实现的,只能将整个数据对象锁住。sem_wait: 1. 信号量大于0,则信号量-- (类比pthread_mutex_lock)但,由于sem_t的实现对用户隐藏,所以所谓的++、--操作只能通过函数来实现,而不能直接++、--符号。sem_post: 将信号量++,同时唤醒阻塞在信号量上的线程 (类比pthread_mutex_unlock)
2023-04-02 17:59:55
731
原创 利用线程属性 / 设置线程的分离状态
属性值不能直接设置,须使用相关函数进行操作,初始化的函数为pthread_attr_init,这个函数必须在pthread_create函数之前调用。之后须用pthread_attr_destroy函数来释放资源。
2023-03-31 23:08:44
302
原创 守护进程(重点)
守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。在linux系统中,我们会发现在系统启动的时候有很多的进程就已经开始跑了,也称为服务,这也是我们所说的守护进程。它是一个生存期较长的进程,通常独立于控制终端(无控制终端)并且周期性地执行某种任务或等待处理某些发生的事件。守护进程程序的名称通常以字母“d”结尾:例如,syslogd 就是指管理系统日志的守护进程。守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢。
2023-03-30 17:26:43
381
原创 进程组 / 会话 (了解)
也称之为作业。代表一个或多个进程的集合。每个进程都属于一个进程组。当父进程,创建子进程的时候,默认子进程与父进程属于同一进程组。进程组ID==第一个进程ID(组长进程)。所以,组长进程标识:其进程组ID==其进程ID可以使用kill -SIGKILL -进程组ID(负的)来将整个进程组内的进程全部杀死。组长进程可以创建一个进程组,创建该进程组中的进程,然后终止。只要进程组中有一个进程存在,进程组就存在,与组长进程是否终止无关。进程组创建到最后一个进程离开(终止或转移到另一个进程组)。
2023-03-30 15:39:06
358
原创 SIGCHLD信号(重点)
如果我们的子进程先于父进程执行,假如在父进程设置完SIGCHLD的信号捕捉函数之前所有子进程都执行结束了,那么父进程就不会再收到子进程发送的SIGCHLD信号,信号捕捉函数就不会执行,进而回收子进程的系统函数waitpid()就不会被调用,那么就会造成所有的子进程变为僵尸进程。在父进程之前死掉的子进程发送的SIGCHLD信号默认动作为忽略,所以可以将之前先于父进程死掉的子进程回收靠的并不是之前子进程的SIGCHLD信号,而是靠的后来收到的SIGCHLD信号,和waitpid函数.目前有两种方法来进行回收。
2023-03-29 23:38:01
475
原创 信号 捕捉
① sa_handler:指定信号捕捉后的处理函数名(即注册函数)。② sa_mask: 调用信号处理函数时,所要屏蔽的信号集合(信号屏蔽字)。注意:仅在处理函数被调用期间屏蔽生效,是临时性设置。sa_sigaction:当sa_flags被指定为SA_SIGINFO标志时,使用该信号处理程序。sa_restorer:该元素是过时的,不应该使用,POSIX.1标准将不指定该元素。③ sa_flags:通常设置为0,表使用默认属性。oldact:传出参数,旧的处理方式。act:传入参数,新的处理方式。
2023-03-29 20:22:49
384
原创 信号集操作函数
内核通过读取未决信号集来判断信号是否应被处理。信号屏蔽字mask可以影响未决信号集。而我们可以在应用程序中自定义set来改变mask。已达到屏蔽指定信号的目的。更多函数具体使用man ***的方式查看手册自定义信号集 // typedef unsigned long sigset_t;将某个信号集清0 成功:0;失败:-1将某个信号集置1 成功:0;
2023-03-29 16:21:33
803
原创 信号 / kill
每个信号都有两个标志位分别表示阻塞和未决,还有一个函数指针表示处理动作。信号产生时,内核在进程控制块中设置该信号的未决标志,直到信号递达才清除该标志。
2023-03-29 10:35:16
387
原创 共享存储映射 mmap / munmap
存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和write函数的情况下,使用地址(指针)完成I/O操作。共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式, 因为进程可以直接读写内存,而不需要任何数据的拷贝。
2023-03-27 16:31:23
914
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人