摩登3咨询:_你这么努力,为什么能力提升还这么慢?

成长&认知 丨 作者 / 袁吴范 这是pointers公众号分享的第20篇原创文章 今天是周六,杭州又是一个阳光明媚的好天气。晒着暖暖的太阳,给大家来一篇。 你是否经常陷入苦恼,为什么明明工作已经非常努力了,但是能力提升还是很慢? 总是羡慕别人那么的优秀,对他们为何优秀却丝毫不知。 最后只能简单地把这一切归因于牛人对我们的智商碾压。 请你耐心看完文章,相信我,你会有大收获。     —  1   — 能力跃升 在学生时代的时候,老师总是教我们你要你好好学习,成绩不会差的。 在职场中,你的领导总是会告诉你,只要努力工作,你的能力就会提升。 最终,大家的能力天差地别,我们总是会归因于智商碾压,运气好,机会多。 如果我们能够认真的分析,就会发现智商真的给他们提供了多少先发优势吗? 能起到决定性的作用吗? 其实真的没有你想象的那样大的差距,那些现在春风得意的牛人们,跟你我一样,都有懵懂的职场初级阶段。 但是几年后,那些优秀的人在能力和认知水平上可能会是普通人的成百上千倍,甚至更多。 强者越强,弱者越弱,个人能力发展的“马太效应”初显,这一切到底是为什么? 真正的原因是由于那些优秀人才长期坚持不懈地积累,他们的能力和认知水平相比我们普通人已经先行进入了指数增长的阶段。 你还否定自己的智商吗? 还在为自己找借口吗? 最后一句送给你:继续努力,静待花开! —  2   — 认知收益和成本 举一个例子。 假定2个人设,你和小明,小明是一个整天不学无术,就知道好吃懒做,没有任何想法,大脑时常空白。 而你,精通Linux内核,对计算机原理了如指掌,各种计算机语言烂熟于心。 你们两个人同时要开发一个简单的局域网聊天软件。 这个任务对于没有任何计算机知识的小明来说,简直无从下手。无奈之下,小明只能照搬互联网上的别人写的代码,艰难完成初步开发,然后一个更加残酷的问题接踵而至,运行期间发生的bug,对于小明来说简直就是天书,他自己是无法独自解决的,他就会花费大量时间,寻找帮手解决,但又不知道其原理,就这样一直在发现问题,艰难解决问题的循环中前进。 这个任务对他来说毫无疑问就是一个高成本低收益的事情。   反观你自己,情况则完全不同。首先你有自己的知识体系,能够经过自己的详细设计、认真编码、仔细测试,最终轻松并且迅速的完成了任务,这个任务对你来说,毫无难度,就是一个低成本高收益的事情。   通过这个例子,可以清晰的发现。 初期在一定的时间内,你付出的努力之后的效果和收益是不明显的。 就像你学习Linux内核,需要学习计算机原理、计算机语言等等,这些需要大量的前期努力。 但当你的知识和能力积累到一定层次之后,你对新知识的认知成本会急剧下降,也就说你的学习过程会越来越轻松。 你的认知收益还会迅速上升,也就是例子中的你,轻松的完成了这个开发任务。 在外人看来就是说你越来越聪明了。 这样此消彼长的双重影响下,收益与成本的比值会急剧的增大。 所以,你会发现,你身边的牛人大多有坚持和专注的品质。 因为你做一件事情你会越来越轻松,而且收益会越来越大,何乐而不为呢? 这才是我们和那些“牛人”之间从本可以望其项背到后来与之判若云泥的客观发展过程。   上面的例子虽然现实中不太可能,但是事实却是如此。 以我自己为例,由于大学期间,打了四年的游戏,直到毕业,才发现身无所长,最终痛下决心,挑灯奋战学习持续2年。好在我自己深知能力积累的“非线性增长”规律,所以也并没有过于气馁和急躁。终于进入海康之后,仿佛是一瞬间被打通了任督二脉,厚积薄发,职场中一路飙升。 这就是认知成本与认知收益叠加之后的力量。 造成我们和优秀同事之间的能力巨大鸿沟的决定性因素其实是“知识能力”积累到一定程度带来的自身增值速度。     —  3   — 认知收纳和建立链接 这时候的你认识到了积累的重要性了。 但是对不起,即便是你日以继夜的积累,也可能达不到能力提升的目的。 最好还差一步,就是缺乏系统思维。 你通过长期积累的知识并没有纳入到你自己的知识体系中去,他们还只是单纯的孤立的知识点。 我们的记忆本质就是记忆逻辑,也就是记忆关联。 我们需要将新知识和已有的认知进行连接。 这样才能达到融会贯通,才能达到信手拈来的程度。 那如何培养自己的系统思维呢? 我自己的学习方式是每当我学习到一个全新知识的时候,我会去思考这个知识点与我脑中现有的知识系统有何联系。然后再去想,我该去如何使用这些知识。 打一个比方。 我们学习数据结构的时候,其中有链表,二叉树等等,这时候你就要去想,这些数据结构是怎么使用的?在你的工作中哪些地方可以用到。跟你脑中的已经学习到的例如Linux内核有关系吗?是不是Linux内核中也使用这些数据结构?内核中为什么要这样使用的? 通过这一番深度思考之后,是不是对知识的理解更加深刻,也就真正成为了你自己的东西了。   再仔细想想为什么常常我们道理都明白,却很难做到? 其实很多时候我们都犯了一个巨大的错误,那就是误把“知道”当作“明白”或者“感悟”。   想知道,道理很容易,那些祖训大家都耳熟能详,但往往真正明白并内化到自己的骨子里却需要付出不少的精力。 所以,再看极少数身边优秀的人,在年轻时就能把这些有价值的道理真正内化到了自己的行动上,不得不说这才是他们身上一直被人们忽略的最大的天赋。   —  4   — 突破舒适区   上个月和老同学们续了叙旧,转眼间已经毕业7年了。 有些同学已经发生了天翻地覆的变化。以前向我借10块还没还的同学,大学期间,每天7点起床,迅速的洗漱完,背上书包,就去实验室,敲代码,练习编程题目,准备参加竞赛。现如今已经自己创业,创立了自己的竞赛培训机构。目前已经基本财务自由。 有些同学经历了考研,目前在华为、网易等大公司里比较基层的岗位工作着。 短短几年之后,职业发展的轨迹就已经天差地别。   如果你还在满足于当前的得过且过状态,你身边的同事们正在暗暗较劲,拼劲学习,努力积累经验。此时将你们进行横向对比,确实差别不大。正所谓逆水行舟不进则退,倘若再过几年呢? 在认知收益和认知成本比值不断增大的情况下,在温水煮青蛙的状态中,在你还没有意识到时,对方能力的已经把你甩的老远。   此时,对方已经开始崭露头角,领导的资源就慢慢向他倾斜。那时,你该如何是好呢? 不要在本该奋斗的年纪选择安逸,那样以后的路越来越难走。天底下没有速成的秘诀,没有捷径可走。  时刻保持危机感,设立高标准,严格要求自己。 当你学会了走路,就要想学着跑步,当你学会了跑步,就要想着到水里,学着游泳。 总之,do it now!   —  5   — 最后的总结   你们可以尝试从认真对待眼前的工作做起,为自己未来的每一年制订一个切实可行的工作与学习计划,早日踏上能力积累的道路,别到明年此时,再言当初若是。 你要相信,能力是存在跃升,只是时间未到,多点耐心。 你要相信,认知收益和成本会急剧的增大,要多积累。 你要对自己的认知进行整合,建立认知链接,打造自己的知识体系。 你要对自己狠一点,谨防陷入舒适区,时刻保持危机感,这是生存法则。 所以,你知道你和牛人的差距了吗? 最后,送给大家一句话:种一棵树最好的时机是10年前,其次就是现在了。 推荐阅读(干货) 程序员如何打造个人品牌? 面试过200人的经验,都在这里了…

摩登3注册网站_Linux内核信号量

概念 Linux内核的信号量在概念和原理上和用户态的System V的IPC机制信号量是相同的,不过他绝不可能在内核之外使用,因此他和System V的IPC机制信号量毫不相干。 如果有一个任务想要获得已经被占用的信号量时,信号量会将其放入一个等待队列(它不是站在外面痴痴地等待而是将自己的名字写在任务队列中)然后让其睡眠。 当持有信号量的进程将信号释放后,处于等待队列中的一个任务将被唤醒(因为队列中可能不止一个任务),并让其获得信号量。这一点与自旋锁不同,处理器可以去执行其它代码。 应用场景 由于争用信号量的进程在等待锁重新变为可用时会睡眠,所以信号量适用于锁会被长时间持有的情况;相反,锁被短时间持有时,使用信号量就不太适宜了,因为睡眠、维护等待队列以及唤醒所花费的开销可能比锁占用的全部时间表还要长。 举2个生活中的例子: 我们坐火车从南京到新疆需要2天的时间,这个’任务’特别的耗时,只能坐在车上等着车到站,但是我们没有必要一直睁着眼睛等,理想的情况就是我们上车就直接睡觉,醒来就到站(看过《异形》的读者会深有体会),这样从人(用户)的角度来说,体验是最好的,对比于进程,程序在等待一个耗时事件的时候,没有必须要一直占用CPU,可以暂停当前任务使其进入休眠状态,当等待的事件发生之后再由其他任务唤醒,类似于这种场景采用信号量比较合适。 我们有时候会等待电梯、洗手间,这种场景需要等待的时间并不是很多,如果我们还要找个地方睡一觉,然后等电梯到了或者洗手间可以用了再醒来,那很显然这也没有必要,我们只需要排好队,刷一刷抖音就可以了,对比于计算机程序,比如驱动在进入中断例程,在等待某个寄存器被置位,这种场景需要等待的时间往往很短暂,系统开销甚至远小于进入休眠的开销,所以这种场景采用自旋锁比较合适。 关于信号量和自旋锁,以及死锁问题,我们后面会再详细讨论。 使用方法 一个任务要想访问共享资源,首先必须得到信号量,获取信号量的操作将把信号量的值减1,若当前信号量的值为负数,表明无法获得信号量,该任务必须挂起在 该信号量的等待队列等待该信号量可用;若当前信号量的值为非负数,表示能获得信号量,因而能即时访问被该信号量保护的共享资源。 当任务访问完被信号量保护的共享资源后,必须释放信号量,释放信号量通过把信号量的值加1实现,如果信号量的值为非正数,表明有任务等待当前信号量,因此他也唤醒所有等待该信号量的任务。 内核信号量的构成 内核信号量类似于自旋锁,因为当锁关闭着时,它不允许内核控制路径继续进行。然而,当内核控制路径试图获取内核信号量锁保护的忙资源时,相应的进程就被挂起。只有在资源被释放时,进程才再次变为可运行。 只有可以睡眠的函数才能获取内核信号量;中断处理程序和可延迟函数都不能使用内核信号量。 内核信号量是struct semaphore类型的对象,在内核源码中位于include\linux\semaphore.h文件 struct semaphore{    raw_spinlock_t        lock;    unsigned int        count;    struct list_head    wait_list;} 成员 描述 lock 在2.6.33之后的版本,内核加入了raw_spin_lock系列,使用方法和spin_lock系列一模一样,只是参数spinlock_t变为了raw_spinlock_t count 相当于信号量的值,大于0,资源空闲;等于0,资源忙,但没有进程等待这个保护的资源;小于0,资源不可用,并至少有一个进程等待资源 wait_list 内核链表,当前获得信号量的任务会与该成员一起注册到等待的链表中 信号量的API 初始化 DECLARE_MUTEX(name) 该宏声明一个信号量name并初始化他的值为1,即声明一个互斥锁。 DECLARE_MUTEX_LOCKED(name) 该宏声明一个互斥锁name,但把他的初始值设置为0,即锁在创建时就处在已锁状态。因此对于这种锁,一般是先释放后获得。 void sema_init (struct semaphore *sem, int val); 该函用于数初始化设置信号量的初值,他设置信号量sem的值为val。 注意: val设置为1说明只有一个持有者,这种信号量叫二值信号量或者叫互斥信号量。 我们还允许信号量可以有多个持有者,这种信号量叫计数信号量,在初始化时要说明最多允许有多少个持有者也可以把信号量中的val初始化为任意的正数值n,在这种情况下,最多有n个进程可以并发地访问这个资源。 void init_MUTEX (struct semaphore *sem); 该函数用于初始化一个互斥锁,即他把信号量sem的值设置为1。 void init_MUTEX_LOCKED (struct semaphore *sem); 该函数也用于初始化一个互斥锁,但他把信号量sem的值设置为0,即一开始就处在已锁状态。 PV操作 获取信号量(P) void down(struct semaphore * sem); 该函数用于获得信号量sem,他会导致调用该函数的进程睡眠,因此不能在中断上下文(包括IRQ上下文和softirq上下文)使用该函数。该函数将把sem的值减1,如果信号量sem的值非负,就直接返回,否则调用者将被挂起,直到别的任务释放该信号量才能继续运行。 int down_interruptible(struct semaphore * sem); 该函数功能和down类似,不同之处为,down不会被信号(signal)打断,但down_interruptible能被信号打断,因此该函数有返回值来区分是正常返回还是被信号中断,如果返回0,表示获得信号量正常返回,如果被信号打断,返回-EINTR。 int down_trylock(struct semaphore * sem); 该函数试着获得信号量sem,如果能够即时获得,他就获得该信号量并返回0,否则,表示不能获得信号量sem,返回值为非0值。因此,他不会导致调用者睡眠,能在中断上下文使用。 int down_killable(struct semaphore *sem);int down_timeout(struct semaphore *sem, long jiffies);int down_timeout_interruptible(struct semaphore *sem, long jiffies); 释放内核信号量(V) void up(struct semaphore * sem); 该函数释放信号量sem,即把sem的值加1,如果sem的值为非正数,表明有任务等待该信号量,因此唤醒这些等待者。 补充 int down_interruptible(struct semaphore *sem) 这个函数的功能就是获得信号量,如果得不到信号量就睡眠,此时没有信号打断,那么进入睡眠。但是在睡眠过程中可能被信号打断,打断之后返回-EINTR,主要用来进程间的互斥同步。 下面是该函数的注释: /*** down_interruptible - acquire the semaphore unless interrupted* @sem: the semaphore to be acquired** Attempts to acquire the semaphore. If no more tasks are allowed to* acquire the semaphore, calling this function will put the task to sleep.* If the sleep is interrupted by a signal, this function will return -EINTR.* If the semaphore is successfully acquired, this function returns 0.*/ 一个进程在调用down_interruptible()之后,如果sem<0,那么就进入到可中断的睡眠状态并调度其它进程运行, 但是一旦该进程收到信号,那么就会从down_interruptible函数中返回。并标记错误号为:-EINTR。 一个形象的比喻:传入的信号量为1好比天亮,如果当前信号量为0,进程睡眠,直到(信号量为1)天亮才醒,但是可能中途有个闹铃(信号)把你闹醒。 又如:小强下午放学回家,回家了就要开始吃饭嘛,这时就会有两种情况:情况一:饭做好了,可以开始吃;情况二:当他到厨房去的时候发现妈妈还在做, 妈妈就对他说:“你先去睡会,待会做好了叫你。” 小强就答应去睡会,不过又说了一句:“睡的这段时间要是小红来找我玩,你可以叫醒我。” 小强就是down_interruptible,想吃饭就是获取信号量,睡觉对应这里的休眠,而小红来找我玩就是中断休眠。 使用可被中断的信号量版本的意思是,万一出现了semaphore的死锁,还有机会用ctrl+c发出软中断,让等待这个内核驱动返回的用户态进程退出。而不是把整个系统都锁住了。在休眠时,能被中断信号终止,这个进程是可以接受中断信号的! 比如你在命令行中输入# sleep 10000,按下ctrl + c,就给上面的进程发送了进程终止信号。信号发送给用户空间,然后通过系统调用,会把这个信号传给递给驱动。信号只能发送给用户空间,无权直接发送给内核的,那1G的内核空间,我们是无法直接去操作的。 内核信号量的使用例程 场景1 在驱动程序中,当多个线程同时访问相同的资源时(驱动中的全局变量时一种典型的共享资源),可能会引发“竞态“,因此我们必须对共享资源进行并发控制。Linux内核中 解决并发控制的最常用方法是自旋锁与信号量(绝大多数时候作为互斥锁使用)。 在这里插入图片描述 场景2 有时候我们希望设备只能被一个进程打开,当设备被占用的时候,其他设备必须进入休眠。 信号处理示意图 在这里插入图片描述 如上图: 进程A首先通过open()打开设备文件,调用到内核的hello_open(),并调用down_interruptible(),因为此时信号量没有被占用,所以进程A可以获得信号量; 进程A获得信号量之后继续处理原有任务,此时进程B也要通过open()打开设备文件,同样调用内核函数hello_open(),但此时信号量获取不到,于是进程B被阻塞; 进程A任务执行完毕,关闭设备文件,并通过up()释放信号量,于是进程B被唤醒,并得以继续执行剩下的任务, 进程B执行完任务,释放设备文件,通过up()释放信号量 代码如下: #include  #include  #include  #include  #include  #include  #include  static int major = 250;static int minor = 0;static dev_t devno;static struct cdev cdev;static struct class *cls;static struct device *test_device;static struct semaphore sem;static int hello_open (struct inode *inode, struct file *filep){        if(down_interruptible(&sem))//p    {        return -ERESTARTSYS;    }      return 0;}static int hello_release (struct inode *inode, struct file *filep){    up(&sem);//v    return 0;}static struct file_operations hello_ops ={    .open = hello_open,    .release = hello_release,};static int hello_init(void){    int result;    int error;        printk("hello_init \n");    result = register_chrdev( major, "hello", &hello_ops);    if(result < 0)    {        printk("register_chrdev fail \n");        return result;    }    devno = MKDEV(major,minor);    cls = class_create(THIS_MODULE,"helloclass");    if(IS_ERR(cls))    {        unregister_chrdev(major,"hello");        return result;    }    test_device = device_create(cls,NULL,devno,NULL,"test");    if(IS_ERR(test_device ))    {        class_destroy(cls);        unregister_chrdev(major,"hello");        return result;    }    sem_init(&sem,1);    return 0;}static void hello_exit(void){    printk("hello_exit \n");    device_destroy(cls,devno);        class_destroy(cls);    unregister_chrdev(major,"hello");    return;}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("daniel.peng"); 测试程序 test.c #include  #include  #include  #include  main(){    int fd;        printf("before open\n ");        fd = open("/dev/test",O_RDWR);  //原子变量  0    if(fd<0)    {        perror("open fail \n");        return;    }    printf("open ok ,sleep......\n ");        sleep(20);    printf("wake up from sleep!\n ");            close(fd);   //加为1} 编译步骤 1 make 生成 hello.ko 2 gcc test.c -o a 3 gcc test.c -o b…

摩登3注册开户_一个端口号可以同时被两个进程绑定吗?

一、1个端口号可以同时被两个进程绑定吗? 根据端口号的绑定我们分以下几种情况来讨论: 2个进程分别建立TCP server,使用同一个端口号8888 2个进程分别建立UDP server,使用同一个端口号8888 2个进程1个建立TCP server、1个建立UDP server,都使用端口号8888 1. 测试代码 我们首先编写两个简单的测试程序。 tcp.c 该程序仅仅创建tcp套接字并绑定端口号8888,没有accept建立连接操作,并且sleep(1000),让进程不要太快退出。 /*******服务器程序  TCPServer.c ************/#include  #include  #include  #include  #include  #include  #include  #include  #include  #define WAITBUF 10#define RECVBUFSIZE 1024int main(int argc, char *argv[]){ int sockfd,new_fd,nbytes; struct sockaddr_in server_addr; struct sockaddr_in client_addr; int portnumber = 8888; socklen_t sin_size; char hello[512]; char buffer[RECVBUFSIZE]; /*端口号不对,退出*/ /*服务器端开始建立socket描述符*/ if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)   {  fprintf(stderr,"Socket error:%s\n\a",strerror(errno));  exit(1); } /*服务器端填充 sockaddr结构*/  bzero(&server_addr,sizeof(struct sockaddr_in)); server_addr.sin_family=AF_INET; /*自动填充主机IP*/ server_addr.sin_addr.s_addr=htonl(INADDR_ANY); server_addr.sin_port=htons(portnumber); /*捆绑sockfd描述符   进程+端口号+ip+socket*/  if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1) {  fprintf(stderr,"Bind error:%s\n\a",strerror(errno));  exit(1); } /*监听sockfd描述符*/ if(listen(sockfd, WAITBUF)==-1) {  fprintf(stderr,"Listen error:%s\n\a",strerror(errno));  exit(1); } sleep(1000);//让程序不要这么快的退出 close(sockfd); exit(0);} udp.c 该程序仅仅创建udp套接字并绑定端口号8888,没有accept建立连接操作,并且sleep(1000),让进程不要太快退出. #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #define SERVER_PORT 8888 #define MAX_MSG_SIZE 1024 int main(void) {  int sockfd;  struct sockaddr_in addr;  /* 服务器端开始建立socket描述符 */  sockfd=socket(AF_INET,SOCK_DGRAM,0);  if(sockfd<0)  {   fprintf(stderr,"Socket Error:%s\n",strerror(errno));   exit(1);  }  /* 服务器端填充 sockaddr结构 */  bzero(&addr,sizeof(struct sockaddr_in));  addr.sin_family=AF_INET;  addr.sin_addr.s_addr=htonl(INADDR_ANY);  addr.sin_port=htons(SERVER_PORT);  /* 捆绑sockfd描述符 */  if(bind(sockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in))<0)  {   fprintf(stderr,"Bind Error:%s\n",strerror(errno));   exit(1);  }  sleep(1000); close(sockfd); }  编译 gcc tcp.c -o tcpgcc udp.c -o udp 2. 执行结果 1).2个进程分别建立TCP server 情况1执行结果 从结果可知,第二个进程绑定端口号8888绑定失败。 2).2个进程分别建立UDP server 情况2执行结果 从结果可知,第二个进程绑定端口号8888绑定失败。 3).1个建立TCP server、1个建立UDP server 情况3执行结果 用netstat命令查看信息。 netstat 从结果可知,该种情形,两个进程分别绑定成功。 3. 结果分析 由上述结果可知:TCP、UDP可以同时绑定一个端口8888,但是一个端口在同一时刻不可以被TCP或者UDP绑定2次。原因如下: tcp的端口不是物理概念,仅仅是协议栈中的两个字节; TCP和UDP的端口完全没有任何关系,完全有可能又有一种XXP基于IP,也有端口的概念,这是完全可能的; TCP和UDP传输协议监听同一个端口后,接收数据互不影响,不冲突。因为数据接收时时根据五元组**{传输协议,源IP,目的IP,源端口,目的端口}**判断接受者的。 二、端口号的一些其他知识点 1. 端口号的作用 端口号可以用来标识同一个主机上通信的不同应用程序,端口号+IP地址就可以组成一个套接字,用来标识一个进程。 2. 端口号的应用场景 在TCP/IP协议中,用“源IP地址”,“目的IP地址”,“源端口号”,“目的端口号”,协议号(IP协议的协议号为4,TCP的协议号为6)这样的一个五元组来标识一个通信,通信的双方在发送消息时,消息的头部会带着这样的五元组。 3. 端口范围划分 (1)0~1023:知名端口号,是留着备用的,一把都是用于协议,例如HTTP、FTP、SSH ; (2)1024~65535:是操作系统动态分配的端口号,客户端程序的端口号,就是由操作糸统从这个范围来分配的,在TCP与UDP的套接字通信中,客户端的端口号就是在此范围中。 4. 知名的端口号与端口号对应的服务器 比如:  HTTP服务器:80  FTP服务器:21 ps:FTP有一个控制连接和一个数据连接,所以FTP是有两个端口号的,控制连接的端口号是21,数据连接的端口号是20,但是如果FTP的端口号默认是21,如果指明FTP有两个端口号的话,那就是21和20,否则FTP服务器的端口号就是21  TELNET服务器:23  SSH服务器:22  HTTPS:443  WEB服务器:25 5. 在linux中如何查看知名端口号? cat /etc/services 6. 一个进程是否可以bind多个端口号? 可以 因为一个进程可以打开多个文件描述符,而每个文件描述符都对应一个端口号,所以一个进程可以绑定多个端口号。 Linux内核会给每一个socket分配一个唯一的文件描述符,进程通过该文件描述符来区分对应的套接字。 7. 一个端口号是否可以被多个进程绑定? 同种协议通常不可以,但有一种情况可以。 ps:如果进程先绑定一个端口号,然后在fork一个子进程,这样的话就可以是实现多个进程绑定一个端口号,但是两个不同的进程绑定同一个端口号是不可以的。 三、SO_REUSEADDR有什么用处和怎么使用? 当两个socket的address和port相冲突,而我们又想重用地址和端口,则旧的socket和新的socket都要已经被设置了SO_REUSEADDR特性,只有两者之一有这个特性还是有问题的。 SO_REUSEADDR可以用在以下四种情况下。(摘自《Unix网络编程》卷一,即UNPv1) 当有一个有相同本地地址和端口的socket1处于TIME_WAIT状态时【4次握手】,而你启动的程序的socket2要占用该地址和端口,你的程序就要用到该选项。 一般来说,一个端口释放后会等待两分钟之后才能再被使用,SO_REUSEADDR是让端口释放后立即就可以被再次使用。 SO_REUSEADDR用于对TCP套接字处于TIME_WAIT状态下的socket,才可以重复绑定使用。server程序总是应该在调用bind()之前设置SO_REUSEADDR套接字选项。TCP,先调用close()的一方会进入TIME_WAIT状态。 4次握手顺序见下图: 4次握手 SO_REUSEADDR允许同一port上启动同一服务器的多个实例(多个进程)。但每个实例绑定的IP地址是不能相同的。在有多块网卡或用IP Alias技术的机器可以测试这种情况。 SO_REUSEADDR允许单个进程绑定相同的端口到多个socket上,但每个socket绑定的ip地址不同。这和2很相似,区别请看UNPv1。 SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。 SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只要每个实例捆绑一个不同的本地IP地址即可。对于TCP,我们根本不可能启动捆绑相同IP地址和相同端口号的多个服务器。 SO_REUSEADDR允许单个进程捆绑同一端口到多个套接口上,只要每个捆绑指定不同的本地IP地址即可。这一般不用于TCP服务器。 SO_REUSEADDR允许完全相同的地址和端口的重复绑定。但这只用于UDP的多播,不用于TCP。 SO_REUSEADDR允许完全重复的捆绑:当一个IP地址和端口绑定到某个套接口上时,还允许此IP地址和端口捆绑到另一个套接口上。一般来说,这个特性仅在支持多播的系统上才有,而且只对UDP套接口而言(TCP不支持多播)。 SO_REUSEPORT选项有如下语义:此选项允许完全重复捆绑,但仅在想捆绑相同IP地址和端口的套接口都指定了此套接口选项才行。 如果被捆绑的IP地址是一个多播地址,则SO_REUSEADDR和SO_REUSEPORT等效。 使用这两个套接口选项的建议:在所有TCP服务器中,在调用bind之前设置SO_REUSEADDR套接口选项;当编写一个同一时刻在同一主机上可运行多次的多播应用程序时,设置SO_REUSEADDR选项,并将本组的多播地址作为本地IP地址捆绑。 设置方法如下: if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR,   (const void *)&nOptval , sizeof(int)) < 0)    ... 附 Q:编写 TCP/SOCK_STREAM 服务程序时,SO_REUSEADDR到底什么意思? A:这个套接字选项通知内核,如果端口忙,但TCP状态位于 TIME_WAIT ,可以重用端口。如果端口忙,而TCP状态位于其他状态,重用端口时依旧得到一个错误信息,指明”地址已经使用中”。如果你的服务程序停止后想立即重启,而新套接字依旧使用同一端口,此时SO_REUSEADDR…

摩登3娱乐怎么样?_华为荣耀正式拥有全新的使命和愿景,全面拥抱年轻人

众所周知,荣耀的市场占比虽然高,而盈利方面不及华为高端产品线Mate、P系列,后两者能带来更高的品牌溢价与利润。上个月初,著名苹果分析师、天风证券分析师郭明錤便在报告中称,华为的应变之策中,最有可能发生情境之一为华为出售荣耀手机业务。 11月17日,多家企业在《深圳特区报》发布联合声明,深圳市智信新信息技术有限公司已与华为投资控股有限公司签署了收购协议,完成对荣耀品牌相关业务资产的全面收购。出售后,华为不再持有新荣耀公司的任何股份。 深圳市智信新信息技术有限公司,由深圳市智慧城市科技发展集团与30余家荣耀代理商、经销商共同投资设立,包括天音通信有限公司、苏宁易购集团股份有限公司、北京松联科技有限公司、深圳市顺电实业有限公司、山东怡华通信科技有限公司、深圳冀顺通投资有限公司、河南象之音健康科技有限公司、福建瑞联优信科技有限公司、内蒙古英孚特通讯技术有限公司、哈尔滨金潭科技发展有限公司等。 声明还称,所有权的变化不会影响荣耀发展的方向,荣耀高层及团队将保持稳定。投资新荣耀的经销商和代理商也承诺:未来只享有财务上的投资回报,在业务侧将遵循公平交易的市场化原则,与其他经销商、代理商享受同等机会。 2013年12月16日,华为打造的互联网手机品牌荣耀正式发布,坚持以互联网创新的轻资产模式。当时,荣耀推出荣耀3C、荣耀3X及华为喵王,成为华为终端发展史上的里程碑事件。 2017年,荣耀以5450万台的销量、789亿元销售额,登上中国互联网手机第一的宝座。 2018年12月26日,荣耀五周年庆暨荣耀V20新品发布会正式举行。发布会上,荣耀宣布启动品牌升级:启用新LOGO,新视觉,新Slogan,荣耀拥有全新的使命和愿景,全面拥抱年轻人。 荣耀品牌诞生于2013年,始终面向年轻人,坚持中低端价位,七年间发展成为年出货量超七千万部的互联网手机品牌。对荣耀的消费者、渠道、供应商、合作伙伴及员工的付出、爱护与支持,华为深表感谢! 祝福独立后的荣耀与股东、合作伙伴和员工一道,踏上新荣耀之路,持续为消费者创造价值,创造一个属于年轻人的智慧新世界!

摩登三1960_Solas横空出世:OLED面板控诉LG和索尼OLED专利侵权

一家位于爱尔兰的OLED技术授权公司Solas OLED近日宣布,在与LG和索尼的专利侵权诉讼中胜诉。此前Solas OLED Ltd(一下简称“Solas”)在德国曼海姆地区法院起诉LG Display Co.、LG Display Germany GmbH、LG Electronics Inc.、LG Electronics Deutschland GmbH和Sony Europe B.V.,指控上述几家公司侵犯其专利,并把LG、索尼的部分OLED电视列为侵权产品。 据悉,涉案专利为Solas的德国专利DE 102 54 511 B4,涉及用于发光二极管的控制电路。Solas于日前宣布曼海姆地区法院裁定其胜诉。 报道称,Solas拥有的这项技术被用于LG和索尼电视中的OLED面板中。根据法院的判决,LG和索尼将不得不停止在德国销售侵犯Solas专利的产品,并且必须召回所有侵权产品。LG和索尼还必须向Solas提交一份详细报表,以确定具体的赔偿数额。 值得一提的是,这已经不是这家公司第一次因OLED专利提起诉讼。去年,Solas OLED在美国德克萨斯州提起诉讼,称苹果侵犯了其OLED专利权,苹果的OLED供应商三星、LG Display也涉及其中。 曼海姆地区法院的判决文件显示,败诉的公司在德禁售以及召回侵权产品,另外需要支付Solas赔偿金。 Solas董事总经理Ciaran O’Gara表示:“我们对裁决表示满意,特别是对法院做出的确认,即:像我们这样的专利授权公司执行强制令以鼓励侵权方获得授权许可的努力,是专利制度的固有组成部分,也是适用法律和经济秩序的组成部分。正是通过这一体系,创新者才能得到奖赏和鼓励,以继续追求创新。” 大家对此还有哪些进一步的看法呢?欢迎留言讨论哦!

摩登3注册网址_嵌入式为什么要编程模块化和代码复用?很多人都没真正理解!

对很多人来,嵌入式软件开发过程中  模块化 (Modularization)是一个海市蜃楼、是一个书面词汇、是一个过气的时尚——模块化似乎从未真正的实现过。 吹牛时人们常不屑的说: 没吃过猪肉,但还没看过猪跑么? 事实上,如果讨论的对象是嵌入式软件,很多人可能真的没有看过猪跑。 在话题变得更像都市传说的之前,我想问一个问题: 为什么要模块化? 有经验的人会说: 为了代码复用(Code Reuse) 进一步——“为什么模块化可以实现代码复用呢?”很多人会说: 你这不是抬杠吗?明摆着的,代码做成了模块,那么别的项目就可以直接使用了,模块里的这部分代码就得到了复用。 更进一步——“代码复用又是为了什么呢?”听到这里项目经理们深吸了最后一口烟屁股,顺手丢到脚边、踩灭、起身准备离开: 代码复用可以节省开发时间,加快项目研发速度。 为了把嘴边的那句“你们慢慢聊,我还有事”噎回去,我们再问一个问题: 实际项目开发中,用模块的时候,项目的进度真的加快了么?时间真的节省了么? 项目经理们不动了,抬起到半空中的屁股慢慢的坐了下来。这次,他们的语气是认真的: 不,使用模块通常并不一定能加快项目进度。老实说,用别人的模块,程序员常常要认真理解模块的功能和代码才能在调试的时候确认问题的范围。你知道,很多时候看懂他人代码所用的时间比自己重新设计一个更长。 周围不少程序员都投来赞同的眼光,有的甚至很认真的点了点头。实际上,这里我们已经发现,在实践中,抛开用于模块化的技术不谈,使用模块实现代码复用本身往往并不能加快一个团队的开发速度——那么我们要模块化做什么? 下结论还为时尚早。从项目经理们的描述可以看出: 代码复用的目的或者说动机是 节省开发时间 实际执行中,程序员因为种种原因,在使用模块时总是要 花费大量时间读懂了代码才能“放心地”去使用它。 程序(软件)是“程序员尝试去固化的自己的思维”;而模块(硬件)则是“业已固化的逻辑”, 读懂一段程序,实际上就是要通过死的代码逻辑去 反推模块构作者的思维,这 是一个逆向过程,这 是一个人与人之间用代码进行间接交流的过程,当逻辑本身较为复杂时,显然比将自己的思维直接翻译成程序(重新开发一个)更为困难。 通过上面的分析,很容易看出,模块化就是为了通过复用代码来加快开发速度,而正是 程序员阅读要复用的代码让这一努力付之东流。由此,我们可以非常直接的得出结论: 使用模块时,必须阻止程序员阅读要复用的代码 或者换一种说法: 使用模块时,必须专注于模块的使用,而必须有意忽视模块的实现逻辑,必须要在心理上信任模块。简而言之,必须把模块视作黑盒子! 很容易发现,上面的结论是站在项目经理的视角得出的,因为项目经理关注的是项目本身,是各类资源的合理利用,是项目的进度—— 项目经理唯一不需要也不应该关注的是具体的技术实现细节 。那么从第一线程序员的视角来看这个问题: 为什么程序员要阅读模块的代码实现呢?   笔者问过不同从业时间/经验的程序员,从过来的的角度来看,无非是以下几个原因: 学习目的——想知道别人是怎么实现的。很多程序员认为通过阅读别人的代码能够快速的学习他人的经验从而提升自己。 然而,从项目管理的角度来看这个问题,程序员利用业余时间阅读他人的代码来提升自己无可厚非,或者说是值得提倡的,但牺牲宝贵的项目时间来阅读模块的实现代码而不是专注于模块的使用(使用模块快速的实现项目所需的功能),这对项目本身是弊远大于利的——阅读代码带来的是程序员的能力提升,这是对团队来说的远期利好,但这一利好对项目本身的时效性却微乎其微——俗话说远水不解近渴就是这个意思。 实际上,项目经理通常要根据程序员的已有能力来分配任务,而不会寄希望于程序员通过阅读模块代码获得提升以后再来回报眼前这个火烧眉毛的项目——如果真有项目经理这么做了,那只能说,进度慢了完全不是程序员阅读模块代码的错,而是他最直接的用人问题——我也只能相信,也许他真的无人可用了。 所以结论就是:严禁工作时间以学习为目的阅读模块源代码。 调试目的——也许并非所有的程序员都对自己的代码质量天然的自信,但几乎所有的程序员都对别人写的代码(模块)天然的不放心——就像孔乙己一样,必须亲眼看了酒保从黄酒坛子里舀出酒来而没有掺水才放心——所以程序出了问题,必然要怀疑模块,而且甚至有很多不负责任的程序员天然的会首先怀疑模块——不是自己写的,怎么能放心——所以调试的时候必然: 要有源代码,否则就不会调试了 必然要阅读模块的代码,否则就不知道究竟这个源代码是不是对的 必然要读懂模块的代码,否则怎么能体“自己的程序出错完全是模块的代码写的不好”。 对于这种情况,就我个人来说,只有一条准则——不提供源代码!只提供库文件——相信我,通常面对汇编代码熟手无策的程序员会在调试的时候自动忽视模块的实现细节,专注于模块接口的输入输出行为——给什么输入,期望什么输出,实际获得什么输出——一目了然,简单直接。如果真的 期望输出和观察到的 实际输出不同,问题也就找到了:要么是文档没有读好,对输入输出的理解有误;要么是输入就有错;要么就是模块有问题。这绝对比读懂源代码以后再来调试要快得多!——除非这个别人写的模块需要你来维护…… 所以说,调试的时候 根!本!不!需!要!读!模!块!的!源!代!码! 根!本!不!需!要!读!模!块!的!源!代!码! 根!本!不!需!要!读!模!块!的!源!代!码! 以调试作为阅读模块的源代码的理由,根本就站不住脚! 仿制目的——这个目的没啥好说,别人把源代码给你就是个错误。请大家自觉抵制无视他人知识产权的行为。从技术上来说,因为要实现自己的版本而需要阅读他人的实现,理解他人的思维,这是一种白盒子行为,因而并不属于正常使用模块的范畴,属于普通的开发范畴。 既然在模块的使用过程中,无论是学习目的还是调试目的都不需要阅模块的源代码,那么可以明确的得出结论: 程序员在使用模块的过程中完全不需要,也不应该浪费项目的时间来阅读源代码。一个团队只有做到了这一点,才能借助代码复用加快项目开发的速度。 当一个团队的项目经理理解了“阅读模块代码”对项目的巨大危害,并以制度的形式对程序员的这一行为予以了制止——移除了模块化实践的绊脚石;那么技术经理应该如何理解、设计和实践适合于当前团队和项目需求的模块化架构呢? -END- | 整理文章为传播相关技术,版权归原作者所有 |  | 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3新闻554258:_还记得那个「最牛删库跑路事件」的程序员吗?他被判了….

大家应该还记得,在今年 2 月份的时候,国内一则程序员删库的消息传遍了全网。 这则消息刷屏的原因很简单——他的几行代码,直接让上市公司微盟的市值一天之内蒸发超 10 亿元,数百万用户受到直接影响。 可以说,这是国内IT界史上最牛逼的删库跑路案例了。 2月25日,“天降横祸”惨被删库的微盟官方宣称,微盟的业务系统数据库(包括主备)遭遇其公司运维人员的删除。 犯罪嫌疑人为微盟研发中心运维部核心运维人员贺某,其在2月23日晚18点56分通过个人VPN登入公司内网跳板机,对微盟线上生产环境进行了恶意破坏。 后来,当事人贺某被警方刑事拘留,而微盟在腾讯云的协作下,花了七天七夜才找回数据。 再加上客户赔付、数据恢复和加班支出,就高达数千万元。 据悉,微盟成立于 2013 年 4 月,是微信生态的第三方服务商,主要提供在线商城系统、商城小程序等等。 根据 2019 年财报数据显示,微盟的注册商户超 300 万。 删库事件发生后,微盟无数商家的生意被迫停摆,不少商家称,“如果客户数据不能找回,对我们的打击是毁灭性的。” 对于贺某做出如此举动的原因,当时网上也有未经证实的消息传出,称贺某是因为桃色事件才删库。 后来经过警方了解,贺某一直深陷网络贷,还曾经有过轻生行为。 并且春节期间贺某一直没有回家,由于疫情不能外出,只能一个人在房间里单独处了 30 多天,加上本身经济上的困难,就做出了这样的举动。 近日,微盟“删库”主角的判决书在网上公开。 判决书显示,8 月 26  日,上海市宝山区人民法院对该案作出一审宣判,贺某被判处 6 年有期徒刑。  向下滑动可查看全文 案件经过摘录如下: 2020 年 2 月 23 日 18 时 56 分许,贺某 酒后因生活不如意、无力偿还网贷 等个人原因,在其暂住地上海市宝山区逸仙路XXX弄XXX号XXX室,通过电脑连接公司 VPN、登录公司服务器后执行删除任务,将微盟服务器内数据全部删除,导致微盟自 2020 年 2 月 23 日 19 时起瘫痪,300 余万用户(其中付费用户 7 万余户)无法正常使用该公司 SaaS 产品,经抢修于 3 月 3 日 9 时恢复运营(故障时间 8 天 14 个小时)。 截至 2020 年 4 月 30 日,造成微盟公司支付恢复数据服务费、商户赔付费及员工加班报酬等 经济损失共计人民币 2260 余万元。 2020 年 2 月 24 日,贺某在暂住地被公安人员抓获,到案后如实供述了上述犯罪事实。 法院判决摘录如下: 上海市宝山区人民法院认为,贺某违反国家规定,删除计算机信息系统中存储的数据, 造成特别严重的后果 ,其行为已构成破坏计算机信息系统罪,应当依法追究刑事责任。公诉机关指控的犯罪事实清楚,证据确实充分,罪名成立。 贺某如实供述自己的罪行,认罪认罚,可依法从轻处罚。辩护人的相关意见本院予以采纳。依照《中华人民共和国刑法》第二百八十六条第二款、第六十七条第三款、第六十四条、《中华人民共和国刑事诉讼法》第十五条之规定,判决如下: 一、贺某犯破坏计算机信息系统罪, 判处有期徒刑六年 。(刑期从判决执行之日起计算。判决执行以前先行羁押的,羁押一日折抵刑期一日,即自 2020 年 2 月 24 日起至 2026 年 2 月 23 日止。) 二、作案工具笔记本电脑一台依法没收。 今年 8 月 ,微盟发布了 2020 年上半年财报。 财报显示,微盟上半年净亏损为 5.46 亿元,其中删库事件预计赔付 0.87 亿元。 当然,受损的不只是微盟,还有微盟的一众用户,这个数字更加难以计量。 这个跟“段子”一样的事件,在国内造成轰动,也给各大企业敲响了警钟。…

摩登3新闻554258:_5G定位技术

本文来源:网优雇佣军 从2G到4G,蜂窝网络的定位技术主要有:E-CID、AoA、ToA、TDOA等。 E-CID 传统基站分为三个扇区,一个扇区对应一个小区,每扇区通常120度,每个小区都有不同的识别码(Cell ID)。 由于基站的经纬度是已知的,根据Cell ID就可以大致锁定手机的位置。但一个小区的覆盖范围很大,通常几百米到几公里,仅基于Cell ID的定位误差非常大,所有有了E-CID定位技术。 E-CID,Enhanced Cell-ID,指基于Cell ID的增强定位技术,包括Cell ID+RTT、Cell+RTT+AoA等。 Cell ID+RTT 在Cell ID的基础上增加RTT(Round Trip Time)测量,即通过TA(Time Advance,时间提前量)得出信号从手机到达基站,或从基站到达手机的时间,再乘以光速(无线信号传播速度)来估算手机与基站之间的距离。 在Cell ID+RTT的定位方式下,可对附近的三个基站进行距离估算来提升定位精准度。 Cell ID+RTT+AoA AoA,Angle-of-Arrival,到达角,就是利用手机信号传送至基站的入射角度来进一步确定手机在该区域的位置。 在Cell ID的基础上,增加RTT和AoA辅助可大幅提升定位精准度。 E-CID,就是在Cell ID的基础上增加TA、AoA、RSRP、RSRQ等辅助信息来提升定位精准度的定位方法。 TOA TOA,Time of Arrival(到达时间)。 指通过测量多个基站发送的参考信号到达手机的时间,来计算不同基站与手机之间的距离,并以该距离为半径分别画一个同心圆,再通过定位算法(三边定位算法、最小二乘算法),来估算手机位置。 TDOA TDOA,Time Difference of Arrival(到达时间差)。 TOA定位法的缺点在于,若基站与手机之间时间不同步,双方都不知道信号发送的绝对时间,会造成计算和定位误差。 而TDOA利用相对时间(时间差)来弥补了这一缺点,即通过测量手机与附近两个基站的信号到达时间差,来计算手机到基站的距离差。 从数学的观点看,手机的位置必定位于以这两个基站为焦点、以其距离差为定差的双曲线上。这样一来,周围三个或三个以上的基站就能两两形成两条或两条以上的双曲线,双曲线的交点就是手机的二维位置坐标。 上表中的OTDOA、UTDOA和E-OTD属于TDOA定位法。 A-GNSS A-GNSS,Assisted GNSS,即网络辅助的卫星定位系统。 A-GNSS需要网络和手机都能接收GNSS信息。在A-GNSS中,网络可以根据终端当前所在的区域,确定所在区域上空的GNSS卫星,将这些信息提供给终端,从而终端可以根据这些信息缩小卫星搜索范围、缩短搜索时间,更快的完成可用卫星的搜索过程。终端快速获得自身的位置后再将位置信息发送到网络的定位服务中心可计算出更精准的位置。 A-GNSS可满足快速移动定位需求,但无法满足室内定位需求。 5G时代的定位需求 5G将使能各行各业的多样化应用,车联网、自动驾驶、智能制造、智慧物流、无人机、资产追踪等大量应用场景对定位能力要求更高,比如车联网中的车辆结队、主动避撞要求定位精度高达30厘米,且要求支持高速移动和超低时延的定位能力;远程操控无人机要求10-50厘米。同时,如资产追踪、无人AGV、AR/VR等大量应用集中在室内,卫星定位系统无法覆盖。因此,5G必须增强网络定位技术来提升定位精准度。 根据3GPP R16定义,5G定位能力必须满足以下最低要求: • 对于80%的终端,水平定位精度优于50米,垂直定位精度优于5米。 • 端到端时延低于30秒。 对于要求严苛的商业用例,5G定位能力至少需满足以下要求: • 对于80%的终端,水平定位精度优于3米(室内)和10米(室外)。 • 对于80%的终端,垂直定位精度优于3米(室内和室外)。 • 端到端时延小于1秒。 5G定位技术 DL-TDOA:5G R16版本引入了新参考信号—-PRS(定位参考信号),用来供UE对每个基站的PRS执行下行链路参考信号时间差(DL RSTD)测量。这些测量结果将上报给位置服务器。 UL-TDOA:5G R16版本增强了SRS(信道探测参考信号),以允许每个基站测量上行链路相对到达时间(UL-RTOA),并将测量结果报告给位置服务器。 DL-AoD(下行离开角):UE测量每波束/gNB的下行链路参考信号接收功率(DL RSRP),然后将测量报告发送到位置服务器,位置服务器根据每个波束的DL RSRP来确定AoD,再根据AoD估计UE位置。 UL-AOA(上行到达角):gNB根据UE所在的波束测量到达角,并将测量报告发送到位置服务器。 Multi-cell RTT:gNB和UE对每个小区的信号执行Rx-Tx时差测量。来自UE和gNB的测量报告会上报到位置服务器,以确定每个小区的往返时间并得出UE位置。 E-CID:UE对每个gNB的RRM测量(例如DL RSRP),测量报告将发送到位置服务器。 所有与定位相关的测量报告都要上报到位置服务器,这些测量报告包括: UE上报的定位测量报告: • 每波束/ gNB的DL RSRP • 下行参考信号时间差(DL RSTD) 简而言之,基于以前的蜂窝网络定位技术,5G R16引入了新的定位参考信号(PRS),采用了DL-TDOA、UL-TDOA、DL-AoD、UL-AOA、E-CID多种定位技术来合力提升定位精度。 同时,由于5G时代超密集网络增加了参考点的数量和多样性,Massive MIMO多波束可让AoA估计更精确,以及更低的网络时延可提升基于时间测量的精度等,这些优势可进一步提升5G定位能力。 未来,5G定位能力将进一步增强,R17版本还会将5G定位精度提升到亚米级。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

摩登3娱乐怎么样?_人工智能有多热?这份报告给你答案

10月22日,《中国新一代人工智能发展报告2020》(以下简称《报告》)在浦江创新论坛发布。《报告》由中国科学技术发展战略研究院、科技部新一代人工智能发展研究中心联合国内外十余家机构编写,是继《中国新一代人工智能发展报告2019》之后第二次发布的年度发展报告。 据中国科学技术发展战略研究院副院长孙福全介绍,《报告》分全球发展、创新环境、科技研发、产业化应用、人才培养、区域发展、人工智能治理七个章节,力图客观反映中国《新一代人工智能发展规划》的实施情况,揭示未来发展的新挑战和新趋势。 中国科学技术发展战略研究院李修全研究员则从撰写报告的角度谈了思考。他进一步指出,人工智能对科技、产业和社会变革的巨大潜力得到了全球更多国家认同。2019年,葡萄牙、西班牙等16个国家发布了人工智能发展战略,至少还有18个国家正在研究和制定国家层面的人工智能战略。 “中国人工智能发展在全球发展具备了很好的基础,但也存在明显短板。”李修全解释说,美国涉及人工智能发展的各个方面都处于领先位置。中国在科研产出、产业发展和政策环境方面有一定优势,但在科技领先实力、人才尤其是高端人才的储备,还有人工智能开源生态等方面还有很大提升空间。 值得关注的是,中国在2019年以更加开放的姿态推进人工智能的国际合作。比如,人工智能国际合作论文数量持续增长,中国在国际人工智能开源社区的贡献度已成为仅次于美国的第二大贡献国,中美两国处于全球人工智能科研合作网络和产业投资网络的中心,人工智能成为“一带一路”国际合作的重要主题。 “强化平台建设和环境培育,成为2019年中国推动人工智能发展的一个重要举措。”李修全举例说,科技部新增了10家国家新一代人工智能开发平台,建设了7个新一代人工智能创新试验区,为人工智能技术在各行业各领域的落地应用创造了很好的政策环境。同时,在数据资源、高效能AI算力、高速移动通讯和物联网等与人工智能发展密切相关的新基建方面加大力度,在完善数据管理体系,更大限度激发人工智能时代数据要素价值等方面,中国也做了很多有益的尝试和积极举措。 《报告》分析发现,中国企业在人工智能领域技术创新中的创新主体作用正日益强化,学术界和产业界共同驱动人工智能创新发展初具形态。人工智能应用场景创新,正在成为中国加速产业化落地和技术迭代的重要途径。 2019年是中国智能芯片加速发展的一年,云边端侧十余款智能芯片产品集中亮相并走向商业化应用,推动人工智能产业链广度与深度进一步提升。《报告》显示,中国央地共治共同推动人工智能发展成效显著。北京、江苏、广东、湖北等地2019 年人工智能论文发表最为活跃,广东、北京、江苏、上海在专利申请数量方面领先全国,而广东、江苏、北京、浙江是人工智能专利转移最为活跃的地区,通过科技成果供给激发区域经济发展新动能。 报告分析认为,中国人工智能区域发展与国家区域战略高度协同相互促进,京津冀、长三角和粤港澳大湾区已成为我国人工智能发展的三大区域性引擎,人工智能企业总数占全国的83%。成渝城市群、长江中游城市群也展现出人工智能发展的区域活力,在人工智能特色产业方面初显区域引领和协同作用。 据介绍,中国人工智能学科和专业建设在2019年持续推进,180所高校获批新增人工智能本科专业,北京大学等11所高校新成立了人工智能学院或研究院。 《报告》认为,人工智能治理成为2019年全球人工智能领域发展最突出的亮点进展,人工智能治理的国际共识逐渐形成,并推动治理原则走向落地实施。中国发布了《新一代人工智能治理原则—发展负责任的人工智能》,启动人工智能社会实验、陆续出台多项法律制度和管理办法,并推动人工智能治理原则在人工智能开放创新平台和人工智能创新发展试验区中落地实施。 免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!