网站需求表,wordpress 问答平台,深圳市门户网站建设,ps怎样做网站详情页单线程并发
单线程并发#xff0c;并非真正意义上的单线程。而是只有单一的用户线程。还包括数据库#xff0c;socket等系统多线程。
单个用户线程#xff1a;对于十万个用户同时访问服务器#xff0c;有两种方式处理并发。 为每个用户开一个新的用户线程#xff0c;每个…单线程并发
单线程并发并非真正意义上的单线程。而是只有单一的用户线程。还包括数据库socket等系统多线程。
单个用户线程对于十万个用户同时访问服务器有两种方式处理并发。 为每个用户开一个新的用户线程每个线程内部采用阻塞通信的方式即同步通信从数据库中取数据、与服务器通信等直到得到结果返回给用户。其中涉及多个用户线程。 只有一个用户线程采用非阻塞通信的方式即异步通信通过事件驱动的方式实现并发。从数据库中取数据、与服务器通信或与其他进程通信并不会阻塞线程的执行每次数据获取完毕通过事件的方式调用用户进程处理得到的数据返回给用户。其中只有一个用户进程。 对于事件驱动的方法会存在一个事件队列唯一的用户进程会不断地依次处理队列中的事件。所以不会存在冲突。有两种处理事件的方法基于监听器的事件处理机制和基于回调的事件处理机制。
常见的线程通信与服务器进行通信socket与数据库进行通信、与文件读写进程进行通信。
前者通过扩展空间的方式后者通过缩短时间的方式。更快速地执行操作。
2 同步与异步 阻塞与非阻塞 老张把水壶放到火上立等水开。同步阻塞老张觉得自己有点傻 老张把水壶放到火上去客厅看电视时不时去厨房看看水开没有。同步非阻塞老张还是觉得自己有点傻于是变高端了买了把会响笛的那种水壶。水开之后能大声发出嘀~~~~的噪音。 老张把响水壶放到火上立等水开。异步阻塞老张觉得这样傻等意义不大 老张把响水壶放到火上去客厅看电视水壶响之前不再去看它了响了再去拿壶。异步非阻塞 多线程同步阻塞。
单线程异步非阻塞通过事件响应机制包括监听器和回调两种方法实现单线程异步非阻塞。 this指针
this关键字指向的是当前对象的引用
this 不是指向类。而是在实例化的时候与当前类的实例也就是对象进行绑定。
关于回调
对于Python与JavaScript这种能够直接传递“函数类型”的参数的语言回调函数可以作为另外一个函数的参数进行传递。
在C和java这种只能传递基本数据类型和构造数据类型的语言中即函数不作为数据类型的语言中可以通过传递整个对象的方法使得被调用者能够通过调用者对象的指针进行回调这也是设计模式的一种。观察者模式
关于回调函数的本质理解当其他程序执行时能够通过回调函数转移进程控制权限给调用者。可以把调用者与被调用者分开。调用者能够显式调用被调用者同时被调用这能通过回调函数隐式调用调用者。
关于回调函数的本质理解回调函数在同一个层次内是没有用的或者说没有必要的。如果一个人在实现一个层次内部的函数执行权限转移过程中可以直接进行相互调用因为本质上两个部分是完全可知的。但是在不同层次的调用中例如用户层与系统层中用户层调用系统层可以通过显式调用但是系统层并不会考虑用户层的具体实现对用户层是不可知的。这个时候系统层会通过传递来的回调函数将进程控制权交给用户层。
那么问题来了直接通过返回值的方式转移进程的控制权限不好吗。在回调的部分通过返回值区分不同的情况用户自己选择执行什么样的函数。
首先允许我在这里将程序简单地分为用户层和系统层。用户层就是程序员编写的代码系统层就是程序语言提供的外部库、框架、工具等。
关于回调函数的本质理解回调函数在单线程的编程中也有一定的作用。在之前的疑问中用户根据返回值调用不同的函数与系统调用回调函数与系统通过回调函数调用用户程序后者当回调程序执行完成后控制权依旧交给系统不必考虑系统在什么地方中断。在这里涉及一个关键的问题到底是用户具有主动权还是系统具有主动权。在架构设计中有一个很关键的问题系统应该提供大量的类、方法等工具帮助用户实现一个完成的程序还是系统应该实现主体的程序在特定情况下调用用户的程序实现局部功能
关于这个问题的讨论我想应该牵扯到系统架构相关的很多知识我觉得有空多读点专业类的书籍还是很有帮助的。理论书籍。要远比自己单纯的了解技术和知识好的多。
我想关于上边的问题应该可以非常好的区分编程框架与库的区别。比如jQuery就是编程库它提供了功能。springboot是编程框架它提供了主体流程用户只要实现少量的自定义模块而不需要管理程序的一级一级调用过程。
简单来说用户只要通过少量的注解就能将自己的类注册到spring框架当中用户完成的知识其中的一笑部分补充代码。
简单举例假如我想要设计一个编程框架这个框架是想要提供可以复用的功能还是想完成主要的流程呢
我之前觉得仿真程序的开发不好的原因是扩展性、可读性、重用性都十分差所以从工程的角度来说这些代码确实需要重构。
那么通过什么样的方式实现代码重构呢最终的要的办法是实现模块化将所有的功能模块化并提供统一的标准接口规范命名等。
另一个很重要的内容是构建新的编程框架。使每一个开发人员都专注于搞算法和逻辑而不是在无休止的重复尝试。写一堆无用的重复的逻辑代码。
模块化提供编程的API实现各种可以重复使用的功能。 编程框架编程模型实现主要的业务流程作为系统层用户通过注入的方式将自己身构建的代码添加到系统流程中。系统通过回调的方式实现特殊情况的处理。