我一直试图找到一个好的定义,并了解一个线程到底是什么.
似乎我必须遗漏一些明显的东西,但每当我读到一个线程是什么时,它几乎是一个循环定义,一个"线程是一个执行线程"或"一种分为运行任务的方法".呃呃.咦?
从我所读到的看来,线程并不是真正具体的东西,就像进程一样.它实际上只是一个概念.从我所理解的这种工作方式,处理器为程序(这已被称为一个执行一些命令执行的线程),那么当它需要切换到处理一些其他节目了一下,它存储状态的它正在某个地方执行的程序(线程本地存储),然后开始执行其他程序的指令.而来回.这样,一个线程实际上只是当前正在运行的程序的"执行路径之一"的概念.
与流程不同,流程确实是某种东西 - 它是资源的集合等.
作为一个定义的例子并没有真正帮助我...
来自维基百科:
"计算机科学中的一个线程是执行线程的缩写.线程是程序将(称为"拆分")本身划分为两个或多个同时(或伪同时)运行任务的一种方式.线程和进程不同于一个操作系统到另一个,但通常,一个线程包含在进程内,同一进程中的不同线程共享相同的资源,而同一多任务操作系统中的不同进程则不共享.
我是对的吗?错误?真的是什么线程?
编辑:显然,一个线程也给出了自己的调用堆栈,所以这是有点的具体事情.
我知道至少在这里已经提出了这个问题.
但是没有一个令人满意的答案,至少对我没有.关于与非托管代码的互操作,有很多关于编组的讨论,但是从一个线程到另一个线程的编组呢,就像我们在.NET中必须做的那样.
这让我问,什么是编组,真的吗?当您给出编组的定义时,您将如何定义它以便解释互操作性的情况,以及您在线程之间"编组"的情况?
.net multithreading definition language-interoperability marshalling
我读了这两篇很棒的文章:
Jonathan Creamer 的angularjs控制器状态
和
由Todd Motto 重新思考AngularJS控制器
在这些文章中,作者讨论了使用控制器的正确方法(使它们成为视图和模型之间的贫血桥梁)和工厂/服务(业务逻辑应该存在的地方).
这是很好的信息,我很高兴开始在我的一个项目上重构控制器,但我很快发现,如果你有一个丰富的对象模型,文章中显示的结构就会崩溃.
以下是"重新思考Angularjs控制器"的设置概述:
这是控制器:
app.controller('InboxCtrl', function InboxCtrl (InboxFactory) {
var vm = this;
vm.messages = InboxFactory.messages;
vm.openMessage = function (message) {
InboxFactory.openMessage(message);
};
vm.deleteMessage = function (message) {
InboxFactory.deleteMessage(message);
};
InboxFactory
.getMessages()
.then(function () {
vm.messages = InboxFactory.messages;
});
});
Run Code Online (Sandbox Code Playgroud)
这是工厂:
app.factory('InboxFactory', function InboxFactory ($location, NotificationFactory) {
factory.messages = [];
factory.openMessage = function (message) {
$location.search('id', message.id).path('/message');
};
factory.deleteMessage = function (message) {
$http.post('/message/delete', message)
.success(function (data) {
factory.messages.splice(index, 1);
NotificationFactory.showSuccess();
}) …Run Code Online (Sandbox Code Playgroud) structure object-model angularjs angularjs-factory angularjs-provider
显然,静态类上不能有实例成员,因为该类永远不会被实例化.为什么我们需要将成员声明为静态?
统一界面
统一接口约束是任何REST服务设计的基础.[14] 统一界面简化和分离了体系结构,使每个部分都能独立发展.该界面的四个指导原则是:
确定资源
在请求中标识单个资源,例如在基于Web的REST系统中使用URI.资源本身在概念上与返回给客户端的表示分开.例如,服务器可以将数据从其数据库发送为HTML,XML或JSON,其中没有一个是服务器的内部表示,并且它是相同的一个资源.
通过这些表示来操纵资源
当客户端持有资源的表示(包括附加的任何元数据)时,它具有足够的信息来修改或删除资源.
自我描述性的信息
每条消息都包含足够的信息来描述如何处理消息.例如,要调用的解析器可以由Internet媒体类型(以前称为MIME类型)指定.响应还明确指出了它们的可缓存性.
超媒体作为应用程序状态的引擎(AKA HATEOAS)
客户端仅通过服务器在超媒体内动态识别的动作(例如,通过超文本内的超链接)进行状态转换.除了应用程序的简单固定入口点之外,客户端不会假定任何特定操作可用于除先前从服务器接收的表示中描述的任何特定资源之外的任何特定操作.
我正在听这个主题的讲座,讲师说:
"当有人使用我们的API时,如果您能够获得客户对象并且您知道有订单对象,那么您应该能够获得具有与客户对象相同的模式的订单对象.这些URI是看起来像是彼此."
这让我觉得不对劲.这不是关于URI的外观或者是否存在一致性,因为它是使用URI的方式(识别资源,通过表示来操纵资源,自我描述性消息和hateoas).
我不认为这就是Uniform Interface的含义.究竟是什么意思?
我希望管理员为我注册一些DLL,但他可能不想安装整个SDK.
他可以安装gacutil.exe吗?如果是这样,他在哪里可以得到它?我只是将gacutil.exe文件通过电子邮件发送给他,他必须把它放在他的机器上才能使用它?
我理解委托人的声明是这样的:
public delegate int PerformCalculation(int x, int y);
Run Code Online (Sandbox Code Playgroud)
但是,必须有更多的事情发生.委托的目的是提供指向方法的指针,为此,您将对方法的引用封装在委托中.
这个参考是什么类型的结构(代表内部)?我也明白你可以在委托中封装对多个方法的引用.这是否意味着委托中有一个包含这些数组的数组?
此外,委托中定义了哪些方法等.当您使用简洁声明委托时,实际发生了什么:
public delegate int PerformCalculation(int x, int y);
Run Code Online (Sandbox Code Playgroud)
?
编辑:一些澄清.声明委托时,编译器会自动创建一个从System.MulticastDelegate继承的密封类.如果你用ildasm查看你的程序集,你可以看到这个.这很整洁.基本上,使用一个语句,您将在编译时获得为您生成的全新类,并且它具有您需要的所有功能.
我正在读一本断言的书(双关语)"你应该Debug.Assert在任何条件总是真或假的情况下用方法加载你的代码."
我没有使用过这两种调试方法,但它有一定道理.但是,我不愿意在我的生产代码库中散布这些东西.
思考?
我已经看到了各种事件处理的例子.这是一个:事件样本.
有时我看到在类之外声明的委托将引发事件(如上面的链接),有时在内部(我认为应该声明它).
它使我更有意义申报活动中,将引发该事件的类.原因是该类将声明的事件实际上只是辅助方法等的一些糖涂层,它们实际上正在添加,减去和调用委托等.
有没有最佳做法?是否有时候你想要在外面声明委托,有时你想在里面声明委托?如果是这样,应该如何决定做什么?
.net ×7
c# ×5
definition ×4
delegates ×2
angularjs ×1
assertions ×1
debugging ×1
download ×1
events ×1
gac ×1
gacutil ×1
handle ×1
implicit ×1
install ×1
internal ×1
marshalling ×1
object-model ×1
process ×1
rest ×1
structure ×1