拥塞控制中流量控制中的滑动窗口和拥塞窗口之间有什么区别和联系?
我认为两者都是传输的控件大小,但有什么区别?我也不太了解流量控制和拥塞控制之间的区别.
我想知道语言中是否存在很大的性能差异,是否应该更有可能if在else子句中或在子句中执行代码.这是一个例子:
// x is a random number, or some key code from the user
if(!somespecific_keycode)
do the general stuff
else
do specific stuff
Run Code Online (Sandbox Code Playgroud)
和另一个解决方案
if(somespecific_keycode)
do the specific stuff
else
do general stuff
Run Code Online (Sandbox Code Playgroud) 长话短说 - 我正在编写一个编译器,并且达到了OOP功能,我面临着涉及处理析构函数的两难问题.基本上我有两个选择:
1 - 将所有析构函数放在程序中该点需要调用的对象上.这个选项听起来像是性能友好且简单但会使代码膨胀,因为根据控制流程,某些析构函数可以多次复制.
2 - 每个代码块的分区析构函数,带有标签和"意大利面条跳转",只能通过所需的代码.好处 - 没有析构函数将被复制,缺点 - 它将涉及非顺序执行和跳转,以及额外的隐藏变量和条件,这将需要例如确定执行是否留下块以继续在父级执行阻止或中断/继续/转到/返回,这也增加了它的复杂性.额外的变量和检查很可能会占用这种方法所节省的空间,具体取决于对象的数量以及内部复杂的结构和控制流程.
而且我知道对这些问题的通常反应是"做两件事,分析和决定",如果这是一项微不足道的任务,那就是我要做的事情,但编写一个功能齐全的编译器已经证明有些艰巨,所以我更喜欢得到一些专家意见而不是而不是建造两座桥梁,看看哪座桥梁做得更好,又烧掉另一座桥梁.
我把c ++放在标签中,因为这是我正在使用的语言,并且我对它和RAII范例有点熟悉,这也是我的编译器正在建模的内容.
我想要异步消息的速度,但仍然有一些流量控制.我怎样才能在Erlang中实现这一目标?
是的,两个讨厌的结构相结合.它听起来是不是很糟糕,还是被视为控制goto使用的好方法,也提供了合理的清理策略?
在工作中,我们讨论了是否允许在我们的编码标准中使用goto.一般来说,没有人想允许免费使用goto,但有些人对使用它进行清理跳转是积极的.如在此代码中:
void func()
{
char* p1 = malloc(16);
if( !p1 )
goto cleanup;
char* p2 = malloc(16);
if( !p2 )
goto cleanup;
goto norm_cleanup;
err_cleanup:
if( p1 )
free(p1);
if( p2 )
free(p2);
norm_cleanup:
}
Run Code Online (Sandbox Code Playgroud)
这种使用的巨大好处是你不必最终得到这个代码:
void func()
{
char* p1 = malloc(16);
if( !p1 ){
return;
}
char* p2 = malloc(16);
if( !p2 ){
free(p1);
return;
}
char* p3 = malloc(16);
if( !p3 ){
free(p1);
free(p2);
return;
}
}
Run Code Online (Sandbox Code Playgroud)
特别是在具有许多分配的类似构造函数的函数中,这有时会变得非常糟糕,尤其是当有人必须在中间插入某些东西时.
因此,为了能够使用goto,但仍然明确地将其与自由使用隔离,创建了一组流控制宏来处理任务.看起来像这样(简化):
#define FAIL_SECTION_BEGIN int exit_code[GUID] = …Run Code Online (Sandbox Code Playgroud) 我知道while循环可以执行任何for循环,但是for循环可以执行任何循环吗?
请举个例子.
我最近偶然发现了Python在不同复合语句中处理else子句的方式似乎不一致.由于Python设计得很好,我确信有一个很好的解释,但我想不到它.
考虑以下:
if condition:
do_something()
else:
do_something_else()
Run Code Online (Sandbox Code Playgroud)
这里do_something_else()只有if condition是假的才会执行.
同样地,在
try:
do_something()
except someException:
pass:
else:
do_something_else()
finally:
cleanup()
Run Code Online (Sandbox Code Playgroud)
do_something_else() 仅在未发生异常时执行.
但是在for或while循环中,总是执行else子句,无论是否for/while block已经执行了内容.
for i in some_iterator:
print(i)
else:
print("Iterator is empty!")
Run Code Online (Sandbox Code Playgroud)
将永远打印"Iterator is empty!",无论我是说some_iterator = []还是some_iterator = [1,2,3].while-else子句中的行为相同.在我看来,在这些情况下else表现得更像finally.我在俯瞰什么?
唯一的使用情况下,我能想到的redo将是操作就像写一个插座或从数据库中读取,但如果失败一次,随后尝试将最有可能也失败,因此它似乎仍然有点无意义的我,为retry我无法想到任何有用的情况.
这可能对我来说似乎毫无意义,因为我不知道或使用Ruby,但我希望有一天能够创建一种非常棒的语言,所以我想至少知道一些最流行语言的设计背后的推理.
我想知道是否有一个else语句,比如在python中,当附加到try-catch结构时,如果没有抛出/捕获异常,则使其中的代码块只能执行.
例如:
try {
//code here
} catch(...) {
//exception handling here
} ELSE {
//this should execute only if no exceptions occurred
}
Run Code Online (Sandbox Code Playgroud) 可能重复:
对于Ruby中的每个
假设我们有一个数组,就像
sites = %w[stackoverflow stackexchange serverfault]
有什么区别
for x in sites do
puts x
end
Run Code Online (Sandbox Code Playgroud)
和
sites.each do |x|
puts x
end
Run Code Online (Sandbox Code Playgroud)
?
对我来说,它们似乎做了同样的事情,for循环的语法对我来说更清晰.有区别吗?在什么情况下这将是一个大问题?
flow-control ×10
c ×2
c++ ×2
loops ×2
ruby ×2
asynchronous ×1
coding-style ×1
destructor ×1
erlang ×1
for-loop ×1
foreach ×1
goto ×1
if-statement ×1
networking ×1
oop ×1
python ×1
redo ×1
syntax ×1
tcp ×1
while-loop ×1