天天新消息丨进程间的通信——消息队列的创建与使用
文章目录
消息队列
【资料图】
概述:
特点:
消息队列的创建与使用
函数接口:
使用:
ipcs和ipcrm用法:
信号量
概述:
相关概念的认识:
(一)进程关系
(二)临界资源和临界区
(三)原子操作
(四)PV操作
信号量接口的介绍:
信号量的使用:
封装系统调用:
案例使用:
思考:三个进程a.b,c分别输出"A","B","C",要求输出结果必须为"ABCABCABC....."
共享内存
概述:
特点:
共享内存的使用与创建
共享内存接口介绍 :
案例使用:
进程间的通信上节讲解:进程之间的通信(管道详解)
消息队列
概述:
消息队列是消息的链表,存放在内存中,由内核维护。消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法,这个数据块由消息类型和数据等信息组成。消息队列遵循先进先出的策略,但因为存在消息类型,有优先级,故消息队列类似于一个优先级队列。
整个过程就好比进程A要给进程B发送消息,A进程把消息放在对应的消息队列后就可以正常返回,B进行需要读取数据时进入相应的消息队列去读取
特点:
消息队列中的消息是由类型的。消息队列中的消息是有格式的。消息队列可以实现消息的随机查询。消息不一定要先进先出的次序读取,编程时可以按照消息的类型读取。消息队列允许一个或多个进程向他写入或者读取消息。与无名管道,命名管道一样,从消息队列中读取消息,消息队列中对应的数据会被删除。每个消息队列都有消息队列的标识符,消息队列的标识符在整个系统中是唯一的。只有内核重启或人工删除消息队列时,该消息队列才会被删除。若人工删除消息队列,消息队列会一直存在于系统中。
消息队列的创建与使用
函数接口:
int msgget(key_t key, int msqflg);msgget()创建或者获取一个消息队列 msgget()成功返回消息队列 ID,失败返回-1 key值可以是人为指定的数字,强转为key_t类型即可,也可以通过ftok 函数获得。人工指定key值:(key_t)1234;//1234就为key值,在创建获取消息队列函数的第一个参数可以这样写通过函数获取:# include# includekey_t ftok(const char* pathname,int proj_id); 成功返回key值,失败返回-1参数为:pathname :路径名; proj_id:项目ID,非0整数,只有低8位有效。msqflg:标识函数的行为及消息队列的权限IPC_CREAT:创建消息队列IPC_EXCL:检测消息队列是否存在位或权限位:可以设置消息队列的访问权限,和其他两个参数可以或表示,如0600,仅拥有者具有文件的读取和写入权限
int msgsnd(int msqid, const void *msqp, size_t msqsz, int msqflg); msgsnd()发送一条消息; //参数意义: msqid:消息队列的id,因为系统中可能有多个消息队列,这id指明往哪个消息队列中添加数 据; msqp:往消息队列中添加的结构体,消息结构为: struct msgbuf { long mtype; // 消息类型, 必须大于0(或者说>=1),长整型,比如图中的1,2 char mtext[1]; // 消息数据 ,用户自己定义,可以是任何类型;这里存放消息数据 };msqsz: 指定 mtext 中有效数据的长度//注意仅仅只接收的数据的大小,不包含消息类 型的大小; msqflg:一般设置为 0 可以设置 IPC_NOWAIT msgsnd()成功返回0,失败返回-1;
ssize_t msgrcv(int msqid, void *msgp, size_t msqsz, long msqtyp, int msqflg); msgrcv()接收一条消息 msgrcv()成功返回 mtext 中接收到的数据长度, 失败返回-1, msgp:接收消息的结构体,一般约定好,写入什么,接收什么结构体; msqsz:接收消息的大小,大于等于发送的消息大小,一般和发送的消息大小一样. msqtyp: 指定接收的消息类型(图中的1和2),类型可以为 0,为0表示不区分消息类型, 按顺位接收消息; msqflg: 一般设置为 0 可以设置 IPC_NOWAIT
int msgctl(int msqid, int cmd, struct msqid_ds *buf); msgctl()控制消息队列,也就是对消息队列做一个控制,可以设置消息队列,也可以移除消息队列; msgctl()成功返回 0,失败返回-1 msqid:消息标识符,即由msgget返回的消息队列表示码cmd(1)IPC_STAT:把msqid_ds结构体中个元素的当前值存入到由buf指向的结构体中。(2)IPC_SET:把msqid结构体中的元素设置为buf中的对应值。(3)IPC_RMID:从系统中删除该消息队列以及仍在该队列中的所有数据,这种删除立即生效。buf:设置或者获取消息队列需要的一个结构体,如果删除就直接给一个NULL;msgctl(msgid,IPC_RMID,NULL);消息队列在内存中创建;
使用:
进程a发送一条消息,进程b读取消息;
利用消息队列进行进程间通讯的方式,我们可以类比为:A需要发送信息给B,但是因为距离原因当面给A,那么就需要A先把信息给XX地址的SS驿站,驿站将其存储,存储箱编号为YYYYY,B要取出这个信息,必须到XX地址的SS驿站取出编号为YYYYY的箱子,打开才可以获取。
在消息队列中,键(key)值相当于XX地址,消息队列标识符相当于SS驿站,消息类型相当于YYYYY编号的箱子。
同一个键(key)值可以保证是同一个消息队列,同一个消息队列标识符才能保证不同进程可以相互通信,同一个消息类型才能保证某个进程取出的是对方的信息。
a.c#include#include#include#include#include#includestruct mess{ long type; char buff[128];};int main(){ int msgid= msgget((key_t)1234,IPC_CREAT|0600);//自己指定的key值,也可以通过ftok获取 assert(msgid!=-1); struct mess dt; dt.type=1; strcpy(dt.buff,"hello1"); //发送消息 msgsnd(msgid,&dt,128,0); exit(0);}
b.c#include#include#include#include#include#includestruct mess{ long type; char buff[128];};int main(){ int msgid= msgget((key_t)1234,IPC_CREAT|0600); assert(msgid!=-1); struct mess dt; //接收 msgrcv(msgid,&dt,128,1,0); printf("%s",dt.buff); exit(0);}
发送三次消息,读两次
将b.c接收处改为IPC_NOWAIT,没有消息不等待,即使没有消息队列,里面也不会阻塞
if( msgrcv(msgid,&dt,128,1,IPC_NOWAIT)==-1) { printf("no mess"); } else printf("%s",dt.buff);
ipcs和ipcrm用法:
ipcs用法
ipcs==ipcs -a 是默认的输出信息 打印出当前系统中所有的进程间通信方式的信息ipcs -m 打印出使用共享内存进行进程间通信的信息ipcs -q 打印出使用消息队列进行进程间通信的信息ipcs -s 打印出使用信号进行进程间通信的信息
输出格式的控制
ipcs -t 输出信息的详细变化时间ipcs -p 输出ipc方式的进程ID ipcs -c 输出ipc方式的创建者/拥有者ipcs -c 输出ipc各种方式的在该系统下的限制条件信息ipcs -u 输出当前系统下ipc各种方式的状态信息(共享内存,消息队列,信号)
ipcrm 命令
移除一个消息对象。或者共享内存段,或者一个信号集,同时会将与ipc对象相关链的数据也一起移除。当然,只有超级管理员,或者ipc对象的创建者才有这项权利啦
ipcrm用法
ipcrm -M shmkey 移除用shmkey创建的共享内存段ipcrm -m shmid 移除用shmid标识的共享内存段ipcrm -Q msgkey 移除用msqkey创建的消息队列ipcrm -q msqid 移除用msqid标识的消息队列ipcrm -S semkey 移除用semkey创建的信号ipcrm -s semid 移除用semid标识的信号ipcrm -a 删除所有进程间通信资源
信号量
概述:
信号量就是控制某个进程能够对某个资源进行访问;保证同一时刻只能由一个进程对某个资源进程访问; 信号量主要用于进程或线程的同步和互斥
信号量是一个特殊的变量,一般取正数值。它的值代表允许访问的资源数目, 获取资源时,需要对信号量的值进行原子减一,该操作被称为 P 操作。
当信号量值为 0时,代表没有资源可用, P 操作会阻塞。释放资源时,需要对信号量的值进行原子
加一,该操作被称为 V操作。
信号量的值如果只取0,1:将其称为二值信号量。
如果信号量的值大于 1:则称之为计数信号量。
相关概念的认识:
(一)进程关系
1.进程同步:进程之间相互合作,协同工作的关系称为进程的同步。简单来说就是多个相关进程在执行次序上的协调,谁先执行后执行都有顺序。是一种直接制约关系。2.进程互斥:多个进程因为争夺临界资源而互斥执行称为进程的互斥。是一种间接制约关系。
比如多个人打篮球,篮球是临界资源,形成互斥,对他们形成了一个间接制约关系。工厂上流水线工作,一道工序接着下一道,有明确的次序,形成同步,上一道的工序对下一道工序有直接影响,是一种直接制约关系。
(二)临界资源和临界区
1.临界资源:在操作系统中,把那些可以被进程共享的资源(文件,打印机等),但是在同一时刻只允许一个进程/线程访问的资源统称为临界资源或共享变量。2.临界区:访问临界资源的那段代码。
(三)原子操作
原子操作是指不会被进程/线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何进程切换。故原子操作要不然不做,要不然一直做到结束。
(四)PV操作
P(SV):如果SV的值大于1,进行减一操作,表示获得资源;如果SV的值为0,则挂起进程的执行,即阻塞,因为目前已经没有资源了。 V(SV):如果当前有挂起的进程在等待资源,那么执行V就会将它唤醒;如果没有,SV加一,即释放资源。P操作会出现阻塞,V操作永远不会阻塞。
信号量接口的介绍:
int semget(key_t key,int nsems,int semflg);创建或者获取一个已经存在的信号量;key:两个进程使用相同的key值,就可以使用同一个信号量;nsems:创建几个信号量;semflg:标志位;如果为创建:IPC_CREAT; IPC_EXCL:检测信号量集合是否存在 位或权限位:可以设置信号量集合的访问权限,和其他两个参数可以或表示 //运行的时候:./a& ./b&如果为全新创建,也就是不知道是否有人创建过,则IPC_CREATE|IPC_EXCEL,就是如果没有则创建,如果有则创建失败 ;
int semop(int semid,struct sembuf *sops,unsigned nsops); 对信号量进行改变,做P操作或者V操作;semid:信号量的id号,也就是刚才semget的返回值;说明对哪个信号量进行操作;sops:结构体指针,指向sembuf的结构体指针,sembuf结构体有三个成员变量:sem_num表示信号量的编号(即指定信号量集中的信号量下标);sem_op表示是p还是v操作;1为v操作(加1),-1为p操作(减1);若此时已经没有资源了进行-1操作:如果指定了IPC_NOWIT,会出错返回。未指定,进程会被挂起,知道有资源或捕捉到信号结束挂起。sem_flg为标志位; struct sembuf{ unsigned short sem_num;//信号量ID short sem_op; //信号量操作 short sem_flg;//操作标志};
int semctl(int semid,int semnum,int cmd,...); 对信号量进行控制:初始化/删除信号量semid:信号量id;semnum:信号量编号;cmd:命令:SETVAL:初始化信号量; IPC_RMID:删除信号量;**注意**:联合体semun,这个联合体需要自己定义;union semun{ int val; //信号量的值 struct semid_ds* buf; // ipc_stat,ipc_set的缓冲区 unsigned short* array; //SETALL,GETALL数组 struct seminfo* _buf; //ipc_info缓冲区(Linux专用) };
信号量的使用:
封装系统调用:
在进行进程同步控制时,经常说到P、V操作,那么如何用上述的系统调用封装一系列的函数,让我们使用起来方便。根据需求我们将其分为4类函数:创建/获取信号量;P操作;V操作;删除信号集合。我们将表示信号量信息的union semun联合体(因为业务简单,所以联合体中只包含信号量的值val即可)和函数声明写在自己创建的.h文件中。
# include# include# include# include# include//保存信号量值的联合体union semval{ int val;};//创建/获得信号量集合int CreateSem(int key,int init_val[],int len);//减1操作void SemP(int semid,int index);//加1操作void SemV(int semid,int index);//删除信号量集合void DeleteSem(int semid);
具体操作实现:
# include# include# include# include# include# include# include "sem.h"//创建/获得信号量集合int CreateSem(int key,int init_val[],int len){ // int semid=semget((key_t)key,0,0664); if(semid!=-1) { return semid; } // semid=semget((key_t)key,len,IPC_CREAT|0664); if(semid==-1) { perror("Create Sem Error\n"); return -1; } // int i=0; for(;i<LEN;I++) p="" union="" semval="" data;="" data.val="init_val[i];" if(semctl(semid,i,setval,data)="=-1)" perror(?init="" sem="" value="" fail\n?);="" -1;="" }="" return="" semid;}="" 减1操作void="" semp(int="" 加1操作void="" semv(int="" semid,int="" index){="" struct="" sembuf="" buf;="" buf.sem_num="index;" buf.sem_op="-1;//" buf.sem_flg="SEM_UNDO;" if(semop(semid,&buf,1)="=-1)" perror(?sem="" v="" }}="" 删除信号量集合void="" deletesem(int="" semid){="" if(semctl(semid,0,ipc_rmid)="=-1)" {="" perror(?delete="" error\n?);="" }}
案例使用:
例题: 进程a和进程b模拟访问打印机,进程a输出第一个字符’a’表示开始使用打印机,输出第二个字符‘a’表示结束打印机;b进程的操作和a进程相同,每个进程循环使用打印机5次。现在打印机为临界资源,所以在某一时刻它只能被一个进程使用,所以输出的结果不应该出现:abab,abba等情况。采取信号量进行同步控制:打印机输入临界资源,那么设定一个信号量来管理打印机:
它只有一台,所以初始值为1,在a进程使用时,我们对其进行一个P操作,即让a获取打印机,此时信号量为0,如果b来访问就会被挂起。在a使用完打印机后,我们释放打印机资源,进行V操作,这是信号量为1,b进程这时就可以访问打印机,b也是一样的,访问前进行一次P操作获取,打印完毕进行一次V操作释放。
a.c# include# include# include# include# include# include# include "sem.h"int main(){ int val=1;//信号量初始值 int semid=CreateSem(1234,&val,1);//a先运行,创建信号集合IDkey为1234,值为1,1个信号量的信号集合 assert(semid!=-1); int count=0;//使用打印机次数 while(1) { SemP(semid,0);//P,占有打印机 printf("a\n"); sleep(5); printf("a\n"); SemV(semid,0);//V,释放打印机 sleep(2); count++; if(count==5) { break; } } exit(0);}
b.c# include# include# include# include# include# include# include "sem.h"int main(){ int val=1;//信号量初始值 int semid=CreateSem(1234,&val,1);//b后运行,直接获取到信号量 assert(semid!=-1); int count=0;//使用打印机次数 while(1) { SemP(semid,0);//P,占有打印机 printf("b\n"); sleep(5); printf("b\n"); SemV(semid,0);//V,释放打印机 sleep(2); count++; if(count==5) { break; } } exit(0);}
编译运行gcc -o a a.c sem.c gcc -o b b.c sem.c
我们观察结果,发现没有出现abab这种a,b进程混乱使用打印机的现象,都是a/b进程打印完了,释放资源,a/b进程再进行获取打印。
思考:三个进程a.b,c分别输出"A","B","C",要求输出结果必须为"ABCABCABC....."
信号量用于同步:有多少个任务就需要多少个信号量。最先 执行的任务对应的信号量为1,其他信号量全为0,每个任务先p自己,v下一个任务的信号量
共享内存
概述:
共享内存为多个进程之间共享和传递数据提供了一种有效的方式。共享内存是先在物理内存申请一块空间,多个进程可以将其映射到自己的虚拟地址空间中。所有进程都可以访问共享内存中的地址,就好像他们都是由malloc分配一样。如果某个进程向共享内存写入了数据,所做的改动将立即可被访问同一段共享内存的任何其他进程看到。
由于他并未提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取。所以我们通常需要用其他的机制来同步对共享内存的访问。例如前面说到的信号量
特点:
注意:共享内存区是最快的IPC形式。一旦这样的内存映射到共享它的进程的地址空间,这些进程间数据传递不再涉及到内核,换句话说是进程不再通过执行进入内核的系统调用来传递彼此的数据。
管道和消息队列需要四次数据拷贝:因为管道和消息队列进行共享的空间都是由内核对象提供管理,所执行的操作也都是系统调用,而这些数据最终还是要在内存中存储的。管道使用数组来保存数据,利用write,read系统调用将数据写入/读取;消息队列使用自定义消息结构体保存数据,利用msgsnd,msgrcv将数据保存/读取到内核中。我们画出管道的拷贝过程:
过程分别是:
从内存空间缓冲区将数据拷贝到内核空间缓冲区。从内核缓冲区将数据拷贝到内存从内存将数据拷贝到内核空间缓冲区从内核空间缓冲区将数据拷贝到用户空间缓冲区。
而共享内存使用相关函数,在内存中开辟一块空间,映射到不同进程的虚拟地址空间,并且向用户返回指向该块内存的指针,因此对该内存可通过指针直接访问,只需要两次:
过程为:
从用户空间缓冲区拷贝数据到内存。从内存拷贝数据到用户空间缓冲区。
共享内存的使用与创建
下面我会详细介绍shm,还有一种内存共享的机制mmap内存映射,下面附相关链接
共享内存机制——mmap和shm_广州市民林先生的博客-CSDN博客_mmap和shm
共享内存与存储映射(mmap) - 秋雨声 - 博客园 (cnblogs.com)
关于共享内存shm和内存映射mmap的区别是什么? - 知乎 (zhihu.com)
mmap()共享内存详解_KuoGavin的博客-CSDN博客_共享内存mmap
共享内存接口介绍:
buf:内核为每个共享内存创建的结构体shmid_dsstruct shmid_ds { struct ipc_perm shm_perm; //用户权限 size_t shm_segsz; //共享内存大小 time_t shm_atime; //最后一次连接时间 time_t shm_dtime; //最后断开连接时间 time_t shm_ctime; //最后改变事件 pid_t shm_cpid; //PID pid_t shm_lpid; //最后一个PID shmatt_t shm_nattch; //多少个进程正在使用这个共享存储};
案例使用:
题目: 两个进程,A进程将获取到的用户数据写入内存,B进程打印共享内存中的数据。
如果我们不对这块共享内存进行同步控制,就会出现读取混乱的问题,会出现A写入的数据还没有被B读,A又重新写入了等问题,所以我们必须要对这块内存进行一个同步控制,就采用信号量来控制,我们分析一下,如何控制A,B才可以实现:A写数据时,B不能读数据;B读数据时,A不能写数据,B进程只有在A写入数据后才可读取数据,A只有在B取出数据后才可以继续发数据。
可以看到A对B有影响,B对A有影响。故需要两个信号量控制,sem1控制A,sem2控制B。信号量初始值的考虑:运行程序,A进程先写入数据,B进程处于阻塞状态,故sem1=1,sem2=0
图示:
完整过程:
先进行shmget函数对内存空间的创建和初始化,再连接共享内存,用ptr保存shmat连接到的内存地址。信号量的创建,初始化。进行循环读取数据,对sem1信号量P操作,进行数据的写入,写完之后对sem2信号量V操作。B进程这一块相反,shmdt断开共享内存连接。shcmtl删除共享内存
//sem.h//两个信号量#include#include#include#define SEM1 0#define SEM2 1#define SEM_MAX 2union semun{int val;};void sem_init();void sem_p(int index); //对哪个信号量进行操作void sem_v(int index);void sem_destroy();
//sem.c#include"sem.h"static int semid = -1;void sem_init(){semid = semget((key_t)1234, SEM_MAX, IPC_CREAT | IPC_EXCL | 0600);//全新创建if (semid == -1){semid = semget((key_t)1234, SEM_MAX, 0600);//获取if (semid == -1){printf("create sem failed!\n");}else{//初始化union semun a;int arr[SEM_MAX] = { 1,0 };for (int i = 0; i < SEM_MAX; ++i)//初始化两个信号{a.val = arr[i];if (semctl(semid, i, SETVAL, a) == -1){printf("semctl setval failed!\n");}}}}}void sem_p(int index){if (index < 0 || index >= SEM_MAX){return;}struct sembuf a;a.sem_num = index;a.sem_op = -1;//p操作a.sem_flg = SEM_UNDO;if (semop(semid, &a, 1) == -1){perror("p error\n");}}void sem_v(int index){if (index < 0 || index >= SEM_MAX){return;}struct sembuf a;a.sem_num = index;a.sem_op = 1;//v操作a.sem_flg = SEM_UNDO;if (semop(semid, &a, 1) == -1){perror("v error\n");}}void sem_destroy(){if (semctl(semid, 0, IPC_RMID) == -1){perror("destroy sem error\n");}}
//w.c写数据#include#include#include#include#include#include#include"sem.h"int main(){int shmid=shmget((key_t)1234, 256, IPC_CREAT | 0600);//获取assert(shmid != -1);char* s = (char*)shmat(shmid, NULL, 0);//映射if (s == (char*)-1){exit(1);}sem_init();while (1){printf("input:\n");char buff[128] = {0};fgets(buff, 128, stdin);sem_p(SEM1);strcpy(s, buff);sem_v(SEM2);if (strncmp("buff", "end", 3) == 0){break;}}shmdt(s);//断开exit(0);}
//r.c读数据#include#include#include#include#include#include#include"sem.h"int main(){int shmid = shmget((key_t)1234, 256, IPC_CREAT | 0600);//获取assert(shmid != -1);char* s = (char*)shmat(shmid, NULL, 0);//映射if (s == (char*)-1){exit(1);}sem_init();while (1){sem_p(SEM2);if (strncmp(s, "end", 3) == 0){break;}printf("read:%s\n", s);sem_v(SEM1);}shmdt(s);//删除共享内存sem_destroy();//销毁信号量shmctl(shmid, IPC_RMID, NULL);exit(0);}
进程的更新就到这了,感谢观看!
标签:
相关推荐:
精彩放送:
- []上海黄浦城更转让旗下两家公司股权及债权 挂牌底价共132.9亿元
- []情侣家族名字大全 适合游戏的情侣名字
- []如何在本地开发和微信服务端进行联调?详细的方法步骤
- []世界即时看!几个你的歌词是什么?关于几个你歌词的介绍
- []环球时讯:保利发展挂牌湖南新滨湖房产51%股权 转让底价2917.14万元
- []热点!基金投资方向上主要分为几类?比较好的基金排行榜
- []反编译.class文件重新编译的方法有哪些?class字节码反编译操作过程
- []天天新消息丨进程间的通信——消息队列的创建与使用
- []防灾减灾内容简短 怎么写比较贴切?
- []世界热消息:微信全面更新升级之后新增的三个功能 你知道几个?
- []世界球精选!中国航空油料集团挂牌转让北京艾迪置业5%股权 底价3000万元
- []全球微动态丨张开泰
- []全球讯息:墨西哥对秘鲁召回其驻墨大使并将两国关系降为代办级表示遗憾
- []全球信息:传统的春节也能将龙谕红酒喝出新花样!
- []江苏宿迁:中心城区购房给予契税补贴最高100% 公积金贷款额提至70万
- []当前消息!河南漯河:稳定房地产开发贷款 对存量房地产信托融资合理展期
- []快消息!深度金选|益生股份预亏近4亿,依然获得机构密集调研!超级鸡周期真的要再现了?
- []世纪丹青赵华胜传
- []建发股份两笔合计200亿元小公募项目状态更新为“已受理”
- []每日讯息!双星87分国王双加时擒快船 威少首秀17+14卡椒78分
- []环球微动态丨安泰科技:截止2月10日收盘,公司股东人数是73,350人
- []全球热点评!巡察微故事|私设账外账发伙食费
- []每日精选:讨武氏檄
- []观天下!凯悦Q4差旅需求复苏落后;温德姆:商务休闲混合旅行仍是趋势 | 一周商旅动态
- []世界焦点!商业数学软件Matlab下载:科技应用软件Matlab 2022b版下载安装激活教程
- []黑龙江教育学院
- []观热点:02月26日06时河南商丘昨日累计报告阳性感染者确诊116例 怎么判断自己是否属于轻型感染者
- []世界观点:同课异构促成长 相互交流齐进步——通州区心理健康教育第四片区(中学)同课异构教研暨新学期计划交流活动
- []街舞团
- []今日快看!南瓜马车简笔画儿童画法_南瓜马车简笔画
- []天天关注:每周研究精读 | 杭州月内土拍两次“高温”,土地投资新变局之民企与国央企(02.19-02.24)
- []【全球时快讯】专题 | 沪杭蓉等7大热点城市成交持续性解析
- []天天热头条丨Booking财报宣布:卖掉美团股票赚12亿美元,CFO将转职
- []广汉市和兴镇卫生院志愿服务队
- []全氟丙烷
- []每日精选:国家能源局:2022年中国已投运新型储能项目装机规模870万千瓦,广东第三!
- []环球今日报丨两个月,65.5万吨多晶硅开工!
- []4天跌超40%!跨界光伏“新玩家”被立案调查!
- []平安车主尊享保障是什么保险,被套路买了平安车主尊享保障
- []每日热文:新生儿医保卡可以网上办理吗,新生儿首次办医保需要带什么材料
- []华夏银行信用卡千万不能办,欠20万信用卡卡奴自救方法
- []天天热议:买保险预约,大黄蜂7号是哪个保险公司的
- []环球视讯!众安贷是正规贷款吗,欠了众安小贷9千多还不上怎么办
- []世界焦点!重磅租赁住房金融支持来了! | 租房新章
- []焦点消息!海利得:公司光伏反射膜产品可以用于现有双玻光伏电站,也可用于新建双玻光伏电站
- []世界微资讯!批驳
- []热文:从管理到赋能:酒店业的第三次社会化分工来了
- []热门:中药上市后临床再评价关键技术
- []OTA巨头全年间夜预订量超过2019年;差旅平台接入ChatGPT | 一周速览
- []每日热文:美乐珠_说一说美乐珠的简介
- []秒变职场精英的利器——科大讯飞智能办公本
- []世界快资讯丨威马再发内部沟通信:部分人员复工复产,其余人员无薪休假
- []南兴股份:公司整体经营情况正常,各项成本变动不大,出货价格比较稳定
- []环球通讯!中国金茂预计2022年归母净利同比下降50%至60%
- []环球百事通!三家疫苗上市公司 2022年业绩下滑
- []大学生毕业创办工作室,陌生人三次上门拍照发帖
- []全球快讯:金融支持住房租赁市场发展意见稿亮相
- []快讯:什么情况?“换电站龙头”频遭减持,控股股东也出手了
- []【播资讯】漏电起痕试验仪
- []全球微速讯:剑盾新发现的草系宝可梦,封面神幻兽打包上也不是御三家一合之敌
- []通讯!深圳控股分拆深业物业港交所递交招股书?2022年前9月收入16.51亿
- []【世界快播报】中国金茂发布盈利预告 2022年报将于3月底前刊发
- []环球快播:两部门拟支持发放住房租赁经营性贷款,最长不超20年
- []每日热议!皇氏集团:公司巴马益生菌产品拟重点在电商平台、媒体、经销商及旅游渠道加强推广
- []港股午评:指数高开高走,恒生科技指数涨6.57%,回港中概股大涨
- []全球微资讯!瑞华泰2022年度净利3887.41万同比减少30.64% 消费电子市场智能手机应用需求下滑
- []今日热搜:罗普特2022年度亏损2.2亿同比由盈转亏 项目回款较往年放缓
- []天天观察:威腾电气2022年度净利7059.19万同比增长18.08% 涂锡铜带产品销量增加
- []今日看点:美腾科技2022年度净利1.25亿同比增长45.03% 坚持“精耕煤炭、进入矿业、打通工业”发展战略
- []全球热消息:贵族禁区的绝对诅咒
- []央行、银保监会:加强和完善住房租赁金融管理
- []热讯:瑞银:中国住房销售或转向10%-25%预付加上竣工后付款模式
- []董卿丈夫被国企追债783万元 具体详细内容是什么
- []聚焦:央行、银保监会:支持发放住房租赁经营性贷款
- []环球视讯!天秦装备:2月23日公司高管刘兴民、张澎、王素荣减持公司股份合计4.4万股
- []世界热消息:央行、银保监会:稳步发展房地产投资信托基金
- []天天快资讯:古鳌科技:2月23日公司高管陈崇军减持公司股份合计2.5万股
- []从管理到服务,甜啦啦护航加盟
- []前沿资讯!远洋服务5400万收购远洋集团旗下一家机电一体化综合解决方案提供商
- []全球快资讯丨富邦股份:2月23日公司高管方胜玲增持公司股份合计270.25万股
- []雄韬股份:2月23日公司高管张华农减持公司股份合计2.15万股
- []全球今亮点!协和电子:2月22日公司高管曹良良减持公司股份合计17.99万股
- []高乐股份:目前公司拟投资的固态电池生产项目尚未正式签订投资协议,公司也尚未履行项目投资的审议程序
- []每日资讯:中泛控股预计2022年收入2800万港元 股东应占亏损23-27亿港元
- []天天快资讯丨皇庭国际536.91万股股份遭司法冻结?占总股本0.46%
- []菱电电控:2月24日周良润减持公司股份合计6000股
- []天天快消息!中国奥园集团委任黄炜强为独立非执行董事 为期一年
- []供销大集股东新合作所持股份将悉数被司法拍卖 占总股本0.21%
- []全球热消息:保利发展转让湖南新滨湖房地产51%股权 底价2917.14万元
- []聚焦IPO | 东昂科技“硬条件”不足撤回上市申请,产能数据与环评文件有矛盾
- []世界头条:新世界发展上半财年溢利33.6亿港元 同比下降14%
- []洪九果品(6689.HK)被纳入港股通 获多家机构“强烈推荐”评级
- []新鸿基地产公布2022/2023中期业绩 净利润同比下滑43.34%
- []天天快资讯:襄阳公积金出台新规 灵活就业人员可按月缴存额确定月还款标准
- []【报资讯】厦门象屿发布A股定增第二次修订方案 拟募集资金32.2亿元
- []当前聚焦:湖北宜化:公司邦普宜化项目建设有序推进,预计2023年第四季度开始试产
- []快播:超达装备发行可转债申请获深交所审核通过
- []当前滚动:苏宁环球集团减持苏宁环球股份达到2% 减持计划实施过半
- []今日快讯:宸展光电:鸿通科技目前的主要业务是提供智能座舱触控显示系统解决方案
- []当前消息!建发收购红星美凯龙进展:香港证监会裁定不会触发全面要约责任
- 家居丨建艺集团:副总经理莫理强因个人原因辞任
- 环球信息:财面儿丨深圳新南山控股:为雅致国际提供1135万元保函金额
- 世界微速讯:机器人:关于减速器,公司主要结合产品、项目的应用场景以及客户具体要求进行采购
- 动态:家居丨喜临门:已收到子公司晟喜华视60%股权转让款3.60亿元
- 世界观速讯丨盟科药业2022年度亏损2.2亿同比亏损减少 销售不断增长
- 世界热讯:新华都:公司将严格遵守法律法规以及《公司章程》的有关规定,请您关注公司后续披露的定期报告和相关公告
- 燕麦科技2022年度净利8476.08万同比下滑30.75% 产品单价下降
- 金银卡无条件保级至2025年,航空公司为何如此“优待”常旅客?
- 重庆共建成首贷续贷中心36个 累计向小微市场主体发放贷款526亿元
- 常州首套房贷利率下限降至3.8%!30城已下调,最低3.7%
- 通讯!当升科技:公司固态锂电材料已开发完成并实现批量供货
- 快资讯:贝泰妮:根据公司发布的2022年三季度报告显示,截止报告期末公司普通股股东总数为18,093户
- 【世界独家】人民银行广州分行:2022年末横琴金融业增加值已达164亿元
- 每日观点:正商实业建议采纳新购股权计划及终止现有购股权计划
- 世界讯息:维信诺:MSCI指数会定期调整成分股,选取和调整原因涉及多个因素
- 天天热推荐:中关村:国美电器持有5000万股份被冻结 累计已被司法冻结1.45亿股
- 世界看热讯:中煤能源:公司2022年3季度末付息债务余额约为845亿元,比年初下降128亿元
- 英力股份:光伏组件产线预计3月下旬首片产品下线
- 微头条丨中科海钠新品发布!能量密度140-155Whkg,循环寿命2000-6000次!
- 每日精选:伴随弗拉门戈火热的舞步,华晟燃情马德里!
- 今热点:全省森林草原高火险呈持续发展并迅速扩大态势
- 2023环保行业5大趋势
- 【快播报】国家级风能太阳能资源气候预测产品首次下发
- 西安17.33亿元挂牌4宗涉宅地 净用地面积共18.16万平方米
- 天天快看点丨2月24日江苏华辰涨停分析:泛在电力物联网,充电桩,新能源汽车概念热股
- 世界头条:2月24日园城黄金涨停分析:黄金概念热股
- 天天最资讯丨汇绿生态:截止2023年2月20日公司股东户数为25268
- 每日速递:上海建工:建工安置房26.4亿元ABS获深交所无异议函
- 天润乳业:截至2023年2月20日收盘,公司股东户数19678
- 微头条丨练口语怎么练?练口语的方法有哪些?
- 环球速递!梅婷彭于晏演的电影叫什么名字?讲述了什么故事?
- 天天微速讯:奔驰纯电动汽车有哪些?奔驰纯电动汽车怎么样?
- 环球今头条!好吃又简单的花甲怎么做?凉拌花甲的做法?
- 快播:海印股份:集团和邵建明合计减持2554万股 占总股本1.02%
- 天天热议:芒种为什么要送花神?芒种送花神有什么说法?
- 合肥城建拟向孙公司工投高新增资3亿元 由子公司按股权比例注资
- 【焦点热闻】重阳节是什么意思?重阳节是怎么来的?
- 环球观热点:小说天涯客周子舒结局怎么样?周子舒是一个什么样的人物?
- 实时:于氏琵琶行
- 全球观天下!梦见鬼怪是什么意思?梦见鬼怪有什么预示?
- 【世界报资讯】大新银行预料港今年通胀上升2%
- 当前头条:2月24日坤泰股份涨停分析:汽车零部件概念热股
- 全球热点!改装汽车排气管违法吗?汽车排气管怎么改装?
- 买洗衣机要注意什么?买洗衣机的注意事项有哪些?
- 百洋医药:公司目前在青岛拥有自主的仓储物流中心,未来仓储布局以满足业务发展需求为目标
- 陈茂波指香港设物业空置税暂不可行
- 天天滚动:上海临港同华物流34%股权成功转让 底价为722万元
- 天天速递!浩物股份:截至2023年2月20日,股东户数为30006户
- 环球短讯!阿里巴巴午后持续走低 股价一度跌超5%
- 天虹股份:天虹与品牌将持续探索各类合作方式,以提升经营效率和顾客体验
- 每日看点!常州:首套房贷利率下限自2月25日起由4.1%降至3.8%
- 天天观速讯丨新能泰山:公司目前与交易对方正在对交易方案进行重新评估和磋商
- 环球热点评!直击企业家天府年会:疫情后川渝民营经济正加速恢复
- 焦点观察:Java免费开发工具有哪些?Java开发工具包汇总
- 观速讯丨运维人员如何查看数据库的整体情况?详情介绍
- 环球即时:五种常见的网页自动跳转方法 搜索引擎的辨识能力有哪些?
- 东阿阿胶:“库存”才下眉头,“高管”却上心头?
- 如何用手机访问自动跳转到手机版?操作方法步骤
- 中山城建3.5亿元公司债利率调整下降至3.15%
- 天天即时看!国际金价后市下看1802美元
- 遥望科技:该公司与本公司并无股权关系
- 最受程序员喜爱的8款代码编辑器 你喜欢哪一款?
- 世界视讯!绿城服务联合汇银物业出资300万共设绿城汇银物业 持股比例55%
- 无影剑满属性是什么?无影剑满属性介绍
- 每日播报!国资房企入局,泰禾福州湾股东会通过D地块项目复工保交房议案
- 深圳公布一批次5宗拟出让地块 总占地面积10.58万㎡
- 全球观察:三星F907n是什么型号手机?你觉得好用吗?
- 世界最资讯丨冠君产业信托2022年录得租金收益共23.59亿港元 同比下降5.5%
- 达志科技:截至2023年2月20日,公司股东人数为6214人,感谢您对公司关注
- 焦点热文:吴青峰和苏打绿同一个人吗?求苏打的手写字
- 全球信息:风鹏正举|天合储能斩获“年度储能领袖企业”和“年度储能系统十大品牌”双奖!
- 【速看料】姓王的来历研究报告:金骥是东周周灵王的长子
- 酒店如何从点评中赢得流量转换?
- 今日看点:NBA球员五大最佳告别赛:韦德25分 诺维茨基23分
- 天天快报!出境游团队游火爆,旅游市场出现“导游荒”
- 储能电池关键参数解读—兴储世纪limestone系列产品
- 【全球时快讯】福州台江区棚改安置房项目正式动工 总投资55亿、建21栋安置房
- 微头条丨首旅集团10亿元中票将于3月3日付息 利率3.82%
- 华纳兄弟将制作多部《指环王》系列新片 将由华纳新线影业开发
- 当前播报:兔宝宝:公司股东人数详见公司披露的定期报告
- 全球今亮点!* 电池管理系统未通过官方质量检测,雅迪两批次电动车上质监黑榜
- 全球报道:内蒙古煤矿坍塌体高度近20层楼高详细内容
- 当前热讯:*ST御银:公司经营情况严格按照有关法律法规和监管要求履行信息披露义务,敬请关注公司公告!
- 每日头条!陕西延安:共有产权公共租赁住房可以选聘企业实施专业化运营管理
- 天天资讯:武汉江夏永旺梦乐城预计11月份开业 总建筑面积11.15万平方米
- 北京海淀区上地西路39号部分土地及房产挂牌 起拍价为8.57亿元
- “20香建01”票面利率下调60个基点调整为3.15%
- 当前信息:差估署:香港1月楼价指数回升0.6%
- 天天即时:朗迪集团:公司参股公司及至微的MEMS振镜技术不能应用于毫米波雷达上
- 福州泰禾福州湾股东会通过D地块项目复工保交房议案
- 全球观天下!万华化学:万华福建PVC项目正在建设中
- 今日热议:经典摄影技巧有哪些?经典摄影技巧分享
- windows7专业版与旗舰版有什么区别?windows7专业版和旗舰版的区别
- 今头条!微软surface维修点大全 微软surface维修中心介绍
- 快看点丨英杰电气:2023年1-2月,公司新增订单继续保持良好状态,包括占比最高的光伏行业订单
- 世界最新:【BT金融分析师】卡骆驰股价大幅上涨,分析师称洞洞鞋不受欢迎的论断错了
- 全球实时:安卓模拟器哪个好用?2款最常用的安卓模拟器介绍
- 环球新消息丨剃须刀哪个牌子的好?品牌剃须刀推荐大全
- 环球播报:4800万像素什么概念?索尼的IMX586介绍
- 【MD5】数据加密获取前端密码