NodeJS是新兴的编程方式,基于javascript本身的特点NodeJS存在自己的优点和缺点。
安全性:NodeJS的安全性你是在指单线程的资源争用吗?NodeJS是单线程的,并且是原生的异步编程模型,对于资源当然不能做太多同步的处理,也就是说你不要用javascript来做同步的事情,如果做同步的工作就不要用javascript。当然有些时候资源同步是必要的,这时候可以在数据库层面着手,比如couchdb,就是多版本的数据库,即使出现资源争用也完全不用担心,数据库回处理多版本问题。所以NodeJS是一个安全的环境。
稳定性:NodeJS的特点是单线程,也就是说整个程序只有一个线程在跑,同时还是异步的,对于多个请求或多个操作是同时进行的,那么假设在这么多的并行操作(单线程和并行不矛盾)中如果有一个操作crash了,结果回怎么样?因为是单线程,这个线程中出现的任何问题都回反映到线程上,某个操作crash就回导致线程的crash,线程又控制着多个并行操作,结果就是:一个操作crash导致整个NodeJS崩溃。所以NodeJS的稳定性还不足。NodeJS还在快速发展中,在未来的某个版本中也许会提高稳定性,目前NodeJS还不适合用来做对稳定性要求很高的项目。
线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。
当对一个复杂对象进行某种操作时,从操作开始到操作结束,被操作的对象往往会经历若干非法的中间状态。调用一个函数(假设该函数是正确的)操作某对象常常会使该对象暂时陷入不可用的状态(通常称为不稳定状态),等到操作完全结束,该对象才会重新回到完全可用的状态。
如果其他线程企图访问一个处于不可用状态的对象,该对象将不能正确响应从而产生无法预料的结果,如何避免这种情况发生是线程安全性的核心问题。
扩展资料:
简单类比
线程安全性问题跟外科医生做手术有点象,尽管手术的目的是改善患者的健康,但医生把手术过程分成了几个步骤,每个步骤如果不是完全结束的话,都会严重损害患者的健康。
想想看,如果一个医生切开患者的胸腔后要休三周假会怎么样?然而单线程的程序中是不存在这种问题的,因为在一个线程更新某对象的时候不会有其他线程也去操作同一个对象。
(除非其中有异常,异常是可能导致上述问题的。当一个正在更新某对象的线程因异常而中断更新过程后,再去访问没有完全更新的对象,会出现同样的问题)
参考资料来源:百度百科-线程安全性。
参考资料来源:百度百科-线程安全。
如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
线程(英文:thread),台湾地区译为执行绪(英文:threadofexecution)、绪程,操作系统技术中的术语,是操作系统能够进行运算调度的最小单位,它被包涵在进程之中,是行程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并行多个线程,每条线程并行执行不同的任务。在UnixSystemV及SunOS中也被称为轻量进程(lightweightprocesses),但轻量进程更多指内核线程(kernelthread),而把用户线程(userthread)称为线程。计算机科学术语,指运行中的程序的调度单位。
更多关于arraylist线程安全吗,进入:https://m.abcgonglue.com/ask/57368b1615783573.html?zd查看更多内容。
java中的线程安全是什么:
就是线程同步的意思,就是当一个程序对一个线程安全的方法或者语句进行访问的时候,其他的不能再对他进行操作了,必须等到这次访问结束以后才能对这个线程安全的方法进行访问。
什么叫线程安全:
如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。
或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。
线程安全问题都是由全局变量及静态变量引起的。
若每个线程中对全局变量、静态变量只有读操作,而无写操作,一般来说,这个全局变量是线程安全的;若有多个线程同时执行写操作,一般都需要考虑线程同步,否则就可能影响线程安全。
单例也不能保证100%线程安全的。解决方法就是创建实例方法中加入Java关键字synchronized。
Java语言的关键字synchronized,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。当两个并发线程访问同一个对象object中的这个加锁同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。然而,当一个线程访问object的一个加锁代码块时,另一个线程仍然可以访问该object中的非加锁代码块。
原文地址:http://www.qianchusai.com/%E5%8D%95%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8%E5%90%97.html